This last byte is relatively unknown and usually deals with Rumble. Usually the bit before Rumble will turn to a 1, if Rumbles been activated before and 0 if it has not. If you are coding this I would only focus on the last 2 bits for the last two bytes (first byte should be read as normal), ignore the rest incase of any unknown protocols/formats.Ĭontroller responds values (Same as origin without the two null bytes): Therefore typical responses are 0x03, 0x02, 0x01, 0x00. The console and controller will then continue the last two sequences until a controller is disconnected. STOP bits are 1 us lows followed by 2us highs.LOW bits are 3us lows followed by 1us highs.HIGH bits are 1us lows followed by 3us highs.High bits are 1us lows followed by 3us highs, LOW bits are 3us lows followed by 1us highs, Stop bits are 1 us lows followed by 2us highs If a controller is disconnected the console will go back to probing for a controller.ĭata is transmitted via one wire and this is how it looks. The official console will report bits slightly differently where instead of 4us for a bit it will be 5us. Meaning 3.75us and 1.25us (instead of 3, 1 and 1, 3 uS respectively).Įxample on how bits would be read (Picture used is from the Sammy Keyboard Controller Protocol):Įxplanation how origin sequence and controller bytes are read:Ĭontroller data is sent as a byte, (8 bits, 0-255 in decimal). This means that 128 by default is the center value and you can go 127 units to the right, and 128 units to the left.īut depending where you controller origins (where the controller starts out at), this changes.
This means that if you were to plug in your controller and you stick as at 129, 131 (x, y).