-
2020-11-13 Progress update - Received Xbox Series X/S controller
11/13/2020 at 18:20 • 0 commentsI received the Xbox Series X/S controller today! It's really nice but unfortunately at first view it only support BLE. (PS5 Dual Sense is still BR/EDR (aka. BT classic)).
Support for this controller will need to wait for me to add the BLE support which will also enable using BLE keyboard & mouse and the Steam controller.
Checkout the Android trace & HID descriptor for the new Xbox controller here.
The descriptor is a mix of the Xbox One controller xinput and dinput descriptor. Look like microsoft is moving away from Xinput. Report 1 & 3 closely match the dinput one, report 2 & 4 are added from the xinput one.
Other than that I ordered some new cables PCB for making PSX cable and ordered 20 BlueRetro DevKit assembled boards for the Beta. I also received most of the extension cord required for building the cable adapter for the Beta.
-
2020-11-07 Progress update - Release v0.8 Genesis & Parallel support
11/08/2020 at 02:36 • 0 commentsGenesis support is finally done!!! I also added support for parallel interfaces for systems like NeoGeo, Supergun, JAMMA, Atari 2600, Master System, etc.
Hotfixes
* [PS3] Fix again PS3 timing for earlier controller version
* [BLECFG] Add minimal support for Find By Type Value RequestBluetooth
* Add basic PS5 Dual Sense support via PS4 HID mode
Wired
* Add Genesis 3 buttons support (2 players)
* Add Genesis 6 buttons support (2 players)
* Add SEGA's Team Player multitap support (8 players)
* Add EA 4 Way Play multitap support (4 players)
* Add 1P 12 buttons parallel mode (NeoGeo, JAMMA, etc)
* Add 2P 6 buttons parallel mode (Atari 2600, Master System, etc)
* Add 1P 6 buttons parallel mode while in auto mode while waiting for detectionConsult the following documentation for building cables:
- Parallel 1P (12 buttons) adapter cable
- Parallel 2P (6 buttons each) adapter cable
- Genesis adapter cable
Consult the following documentation each system usage & web-config specifics:
-
2020-11-05 Progress update - Documentation overhaul
11/06/2020 at 01:02 • 0 commentsBeing a project with a huge feature set, BlueRetro got a lot of trap for new users. I took some time in the last week to improve the overall project documentation. Existing page now got much more detail and are easier to navigate via a table of contents. I also added a new page to document in more detail the web config for each supported system. This page is also a good place to see the currently supported feature.
- The wiki home contain the global user manual that give the basic information to get going:
https://github.com/darthcloud/BlueRetro/wiki - Process to pair each type of Bluetooth controller can be found here:
https://github.com/darthcloud/BlueRetro/wiki/Controller-pairing-guide - Usage of the web-config for each system supported can be found here:
https://github.com/darthcloud/BlueRetro/wiki/BlueRetro-System-Specific-User-Manual - Detailed step for building the adapter cables:
https://github.com/darthcloud/BlueRetro/wiki/BlueRetro-Cables-Build-Instructions
- The wiki home contain the global user manual that give the basic information to get going:
-
2020-10-30 Progress Update - PS5 DualSense & Genesis support
10/30/2020 at 17:02 • 0 commentsI was quite busy this month but still made good progress on Genesis support.
2P mode support both 3 buttons and 6 buttons controller or any mix of the two. Support for the SEGA Team Player is done also and support any mix of multitap / controllers. You can play up to 8!
I somehow received my PS5 dual sense controller before launch (Thanks BestBuy!!) and quickly got basic HID support working. The more specific mode is different than PS4 so I will have to wait for that support to land in Linux to add it since I got no PS5 system to reverse engineer it! The only loss for BlueRetro using the basic HID mode is rumble and LED support.
Checkout this pre-release v0.7.3 for basic Dual Sense support.
See https://github.com/darthcloud/bt_traces/commit/1aece8d6fcb4fa40e2deebac0eb3de0c41353ba4 for wireless traces and HID descriptor of the PS5 Dual Sense.
I should get an Xbox Series X/S controller soon as well.
I will now work on adding EA multitap support and then I will add 1P & 2P Parallel modes for Atari/Master System & NeoGeo. Once this is done, I got to retest everything before finally releasing v0.8.
-
2020-10-11 Progress Update - OSHWA Certification
10/11/2020 at 19:13 • 0 commentsI just got the OSHWA Certification for BlueRetro!
Other than that I'm still working on the Genesis implementation. I got 6 buttons mode kind of working but it's not reliable yet...
-
2020-10-09 Progress update - Genesis 2P work!
10/09/2020 at 12:35 • 4 commentsI won't go in detail yet but just wanted to share I got basic Genesis support working.
I figured a way to get sub 1us GPIO transition on the ESP32! More on that later :)
-
Open Beta Preorder
10/04/2020 at 15:39 • 0 commentsContest end tomorrow and I think now is the good time to start taking preorder for the open beta.
I will make 25 BlueRetro DevKit available and they should be ready around December 2020. The first 25 persons on the preorder list we be offered to buy them once they are build. (No money taken upfront)
I will sell each DevKit 100 USD since the low volume and external assembly will add to the cost. I will also make any cable you want for 20 USD (30 USD for those that require more work). Alternatively you can buy a cable kit for 5 USD that will only include the PCB pre-soldered with the SMD parts & the DB25 connector. (You got to source the cable & backshell yourself).
You can add your name to the preorder list via this form:
https://forms.gle/TyieHLHRTFCQXz46A
Once I got the board ready, I will send PayPal invoice to the people on the list.
On another subject I made kicad symbol for all consoles controller port. It's quite nice! I updated all cable schematic to use them! Also checkout the new cable assembly guide.
-
Testing BlueRetro
09/30/2020 at 17:59 • 0 commentsTesting the BlueRetro software revolves around 4 distinct categories: Manual, Community, Automation & Performance testing. As of today the vast majority of the test were from the manual testing category which is my wife, my friends and I playing games with BlueRetro. Each release I try to retest as much as possible.
Manual testing
I retest the following every release by playing around 5 minutes in each test. (Probably take me around ~3 hours when motivated ;) )
- FC/NES
- 2 players mode
- Four score 4P mode
- FC 4P player mode
- SNES
- 2 players mode
- Multitap 5P mode
- Saturn
- 2 players mode / Digital mode
- 2 players mode / Analog mode
- 1 multitap slot 1 / Digital mode
- 1 multitap slot 2 / Analog mode
- 2 multitaps / digital mode
- N64
- 4 players mode with rumble enable
- 2 players / 4 controllers dual joystick mapping (GE / PD)
- Dreamcast
- 4 players mode with rumble enable
- GamePad Alt (2nd joystick + D,C,Z) mode
- GameCube
- 4 players mode with rumble enable
- JVS
- 2 players mode (only what my Arcade board support)
- Bluetooth
- Generic HID controller (8bitdo Dinput / xinput)
- PS3 Sixaxis & DualShock 3
- Wiimote + Nunchuck & Classic controller
- WiiU Pro
- PS4 DS4
- Xbox One S
- Xbox adaptive controller + Logitech 3D joystick
- Switch Pro
- Generic HID keyboard
Community testing
BlueRetro community is still quite small but very valuable feedback is already provided and resulted in bugs fixes!
Going forward this will be the main way of debugging BlueRetro. I will make a limited release of the BlueRetro DevKit PCBs for the open beta.
The beta will help in testing the various Bluetooth controllers revision that exist for already supported devices and also test new devices I do not own. While the wired interface work well with the games I tested, I fully expect some games to be troublesome and I can't myself test the 1000+ games that compose BlueRetro supported systems library.
Automation testing
Automation testing will be handle by using another BlueRetro with a special test firmware that will allow simulating the wired system and the Bluetooth controller. The special firmware will be minimal and leverage the existing BlueRetro code. The higher level control will be handled by a Python script using the pytest framework for running the test suite.
Connecting the two BlueRetros together will be done via a special test jig cable.
Since some of the ESP32 pins are inputs only, it's not possible to simply connect each pin of both DB25 to each other. Since the host BlueRetro SD card will not be used, those extra IOs are used to control the input only pin of the DUT. The UART output of the DUT will be connected to the host BlueRetro for helping validation by parsing the logs. The JVS UART driver will be leveraged for the PC interface via the USB UART of the host BlueRetro.
Performance testing
Performance of BlueRetro is measured by the added latency in the control input versus an original wired controller. Latency in a video games controller is the time between a button is pressed and an action appear on the TV screen.
The easiest way to test this would be to put BlueRetro in one of the parallel modes and measure the time between the buttons press and the output pins change. The problem doing this is that the parallel mode is not representative at all of the vast majority of supported system that requires a more complex wired driver. Measuring at that point for a serial base protocol would make triggering automatically on the output event quite complex. For a single test it would probably be fine to analyze the trace by hand and figure the timing. But for characterizing the latency properly multiple tests will need to be done in the order of thousand measurements.
A little bit more complicated but more easier to replicate a thousand time approaches is to probe one of the analog RGB lines of the console output. This make the measurement process identical across all platform (At least with those with RGB output). The only thing required is a flash card to run a simple test program on the console to toggle the screen between black & white on buttons press & release.
The trigger is done when the RGB line toggle between 0V (black) and 0.7V (white).
- FC/NES
-
Input and output specifications
09/27/2020 at 19:22 • 0 commentsQuick log today only to document BlueRetro's various interfaces specifications:
-
PCB assembly checklist
09/22/2020 at 10:18 • 0 commentsFinally done testing and reworking the PCB v1.1 . The PCB design is good, nothing need to be change. The new ESD array chips I used are a lot easier to work with. In any case the next batch will be assembled by professionals. I will keep those boards for my own personal tests.
I followed the following checklist while testing and reworking the boards. It's very helpful to not forget any step!
Items Notes Check for short between supply and ground VBUS_C, VBUS, 3V3_USB, 1V8, 3V3 Check U2 alignment and pin short Visualy with magnifying glass. Check U3 for short. Make sure 3 pins are not short with multimeter. Check U4 for short. Visualy with magnifying glass. Check U6 for short. Visualy with magnifying glass. Test USB Validate LED is on and that PC detect both UART. In FT-Prog utility validate EEPROM is detected. Check U7, U10, U11, U12, U13 for short on internal side. Check with multimeter on ESP32 side. Check U7, U10, U11, U12, U13 for short on external side. Check with multimeter on connector contacts. Check U1 for short. Check with multimeter between each adjacent pins. Check U7, U10, U11, U12, U13 continuity between connector & ESP32. Use multimeter to measure resistance. Should 100 Ohm. Program ESP32 via USB UART. Place jumper on TX & RX on UART header. Place power jumper on VBUS.
Validate programming is done without requiring any press on switches. Check USB TX & RX LEDs. Validate Green power led is ON.Test Switches Hold reset switch, validate error LED is on, release reset and validate error switch goes off. Press Boot switch and validate message appear in UART logs. Test JTAG Program JTAG FW & populate JTAG jumpers. Test connection. Test SD card. Reprogram regular FW, insert SD card & validate no error in logs. Connect 7 Bluetooth controllers Make sure radio is working fine. Try will all supported systems Test with DC, Saturn, N64, NGC, NES, SNES & JVS.