Announcement

Collapse
No announcement yet.

External Device (Polling Rate) Issue

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • External Device (Polling Rate) Issue

    I’ve been testing the new 9.3 update using an ESP32-S3 with both Wi-Fi and dual USB direct connection, and I’m running into a pretty serious polling rate issue.

    My target device is my main PC, while reWASD and the ESP32-S3 are running on my laptop. The boards I’ve tested this with are an ESP32-S3 N16R8 Gold Edition Development Board and a LILYGO T-Dongle-S3 ESP32-S3.​ When the virtual controller is connected to the target PC through the external device option, the polling rate drops massively. Instead of anything close to 1000 Hz, I’m seeing input intervals around 10 ms and sometimes even jumping into the 30–60 ms range, which is basically a ~900 Hz loss.

    What’s strange is that if I turn off the external device checkbox in reWASD and just run the virtual controller locally on the laptop, the polling rate is exactly what it should be at 1000 Hz. The problem only shows up when the controller is routed through the external device to the target PC.

    This doesn’t seem right at all, especially considering it happens both over Wi-Fi and in dual USB mode. I’ve tested this with two different ESP32-S3 boards and the behavior is identical. To rule out network or PC issues, I also tried a completely different program that sends joystick input over the network from one PC to another (UDP), and that maintained a solid 1000 Hz polling rate. Other remote play methods behaved the same way, so this doesn’t seem like a general network limitation.

    I’ve tried all available virtual controller types (Xbox One, Xbox 360, DS4), and I also tested using authenticated controllers for DS4 and Xbox One modes to see if that made any difference, but the results were the same.

    At this point it feels like it could be an ESP32 firmware or timing issue specific to how reWASD is handling external devices in 9.3. It’s pretty frustrating, especially after spending close to $60 on multiple ESP32-S3 boards just to rule out hardware problems.

    Does anyone know if this kind of behavior was present with the ESP32-S2 in the past, or if the physical device’s polling rate was always used correctly there? And in the meantime, are there any settings, or workarounds I could try while this hopefully gets addressed?
    Last edited by furtive; 22.12.2025, 01:57.

  • #2
    To isolate possible issues with WiFi I would first check dual USB connection via your ESP32-S3 N16R8​ board, so everything is wired only. Could it be some power saving issue with COM port on your laptop side or on target USB port? We'll do more tests on our side, but definitely what you say should not happen. What serial port driver Windows uses on yout laptop where you apply config? Maybe some COM port settings must be changed.
    Where did you purchase these boards? Show us exact links and models please.
    That said, 1000 Hz polling rate on external USB device is not possiple anyway: for xbox 360 and DS4 it is limited by 250 Hz (4 ms), as we try to emulate real device and 4 ms interval is typical for USB endpoint on these models. For Xbox One interval is 500 Hz (2 ms). But anyway, you have much worse results so it must be investigated.
    Also try to set your virtual device perfomance to lower value - Ultra setting may not be ideal because of COM port limitation and it may create bottleneck (this may depend on COM port drivers).

    Comment


    • #3
      These are the two boards I’m using:

      https://www.amazon.com/dp/B0FNQVZJ6D — ESP32-S3 N16R8 Gold Edition Development Board
      https://www.amazon.com/LILYGO-T-Dong.../dp/B0BK9162QY — LILYGO T-Dongle-S3

      I’ve already tried changing various COM port settings in Device Manager, including baud rate and other related options, but it didn’t make any difference. I also tested lowering performance-related settings to see if that helped, but the polling behavior stayed the same.

      To rule out a system-specific issue, I flipped the setup around and installed reWASD on my main PC while using my laptop as the target device, and I still saw the same results. I’ve also tested both CP210x and CH340 drivers, with no change in behavior.

      Comment


      • #4
        We have made more tests - there are some weird results with S3 boards indeed: reports are not as stable as on S2 boards. Eg. on S2 we get stable 250 Hz, but on S3 some reports are missed.
        We are investigating this and will get back to you.

        Comment


        • #5
          Thanks, that’s good to hear about the polling rate being stable on the S2 boards. In that case, would it actually be worth picking up an S2 in the meantime? The main reason I went with the S3 in the first place was because most S2 boards seem to be limited supply and hard to get quickly, at least where I’ve looked.

          I’m also curious about the explanation behind why 1000 Hz isn’t possible externally. I know that DS4 and Xbox 360 controllers can be overclocked to 1000 Hz on the virtual side, and DS4 can even be overclocked physically (not totally sure about Xbox 360 controllers). Does that mean using a physical auth controller that’s already overclocked to 1000 Hz could help here, or is the bottleneck actually on the USB interface of the target device itself?

          One other thing I’ve noticed is that when I run a polling rate test while using the S3 externally, it keeps cycling back and forth between roughly 8 ms and 12 ms with almost nothing in between, and most of the time it averages out to around ~100 Hz once the test finishes. That behavior is same across both boards (WIFI and USB) I tested.

          Since this is PC-to-PC and not a console, I’m also wondering if something like hidusbf could help by overclocking the actual USB port on the target side. I know that normally applies to physical devices, but I’m not sure how that plays with an external device acting as a bridge.

          Just trying to figure out whether this is something that can be worked around on my end.

          Comment


          • #6
            You can try with S2 boards, but they are hard to find indeed and this was main reason we have added S3 support, which is more mainstream now.
            What concerns 1000 Hz it is possible externally in theory, but has no practical use because you are also limited by delays via WiFi or COM port throughput.
            We can make some experiments in the future, but cannot guarantee anything.
            Total latency you get is sum of all factors: speed and jitter of your physical controller, COM port (serial chip type and driver implementation) or WiFi speed and delays (eg. if you have noisy environment). There is a lot going on, so you need to test different scenarios and find out what is best for you.
            Speed of physical auth controller does not matter at all - it is needed to process security data only and is used infrequently. But speed of your actual controller you use to play (keyboard, mouse or other controller) matters a lot for latency.

            >One other thing I’ve noticed is that when I run a polling rate test while using the S3 externally, it keeps cycling back and forth between roughly 8 ms and 12 ms with almost nothing in between,

            Yes, that's exactly the issue we are investigating - it must be around 4 ms always (and on S2 it is). Seems some firmware issue.

            > I’m also wondering if something like hidusbf could help by overclocking the actual USB port on the target side.

            There is no sense in overclocking the actual USB port on the target side because you will still get reports only as fast as reWASD delivers them via bridge.
            This is controlled on your host PC with reWASD.
            For Xbox One it is currently 500Hz (cannot be higher and is actually Xbox One driver limit) and for Xbox 360 it is 250Hz (can be made higher and maybe in next version we'll try to make it 500Hz as well).
            For DS4 it is always 250Hz and cannot be changed, because it is how real controller works and many games or applications (and PS4 console ) expect this value and could behave unpredictable otherwise. It could be also more easily blacklisted then. But we could maybe add some option later and increase the value, if user wants it (same as you can locallly).

            Comment

            Working...
            X