/LEGO-Mario-Reveng

Reverse Engineering of LEGO Mario, Luigi, and Peach

Reverse Engineering of LEGO Mario, Luigi, and Peach

Overview

LEGO Mario as BLE Device

LEGO Mario is a BLE device which supports LEGO Wireless Protocol. It has six input/output devices as follows:

  • Port 0: 0x47 Accelerometer, Gesture?
  • Port 1: 0x49 Color Barcode, RGB Color
  • Port 2: 0x4a Pants
  • Port 3: 0x46 Events, Debug, and something
  • Port 4: 0x55 ???
  • Port 6: 0x14 Voltage

Color Barcode

Each color barcode is drawn with five out of nine (eight?) colors. The first two lines are always green and red as header part. The other three lines are data part. The data value can be from 0x01 to 0xd2. That means there are 0xd2 = 210 (= 7 * 6 * 5) patterns.

Pants

Each pants has a unique 6 bit code. The pants sensor at the bottom of LEGO Mario can detect it physically.

  • e.g. The normal Mario's pants is 100001 = 0x21.
  • See details

LEGO Wireless Protocol

Manufacturer Data

Example: 97 03 00 43 03 ff ff 00

  • System Type and Device Number:
    • 0x43 LEGO System - Mario
    • 0x44 LEGO System - Luigi
    • 0x45 LEGO System - Peach
  • Device Capabilities:
    • 0x03 Supports Central Role, Supports Peripheral Role

Hub Properties

  • 0x03 FW Version: 5.0.00.0000
  • 0x12 Volume: 0 - 100

Port Information [0x43]

Port ID IO Type Capabilities Input Modes Output Modes Possible Mode Combination
0 0x47 Logical Combinable, Input 0, 1 - [0, 1]
1 0x49 Logical Combinable, Input 0, 1 - [0, 1]
2 0x4a Input 0 - -
3 0x46 Input 0, 1, 2, 3 - -
4 0x55 Input, Output 0, 1 0, 1 -

Port Mode Information [0x44]

Port ID Mode Name RAW Range PCT Range SI Range Symbol Mapping Value Format
0 0 RAW 0 - 100 0 - 100 0 - 100 cnt Supports NULL, Discrete 3 * 8 bit
1 GEST 0 - 10 0 - 100 0 - 10 raw Supports NULL, Discrete 2 * 16 bit
1 0 TAG 0 - 10 0 - 100 0 - 10 idx Supports NULL, Discrete 2 * 16 bit
1 RGB 0 - 10 0 - 100 0 - 10 raw Supports NULL, Discrete 3 * 8 bit
2 0 PANT 0 - 63 0 - 100 0 - 63 idx Supports NULL, Discrete 1 * 8 bit
3 0 CHAL 0 - 65535 0 - 100 0 - 65535 na Supports NULL, Discrete 2 * 16 bit
1 VERS 0 - 255 0 - 100 0 - 255 na Supports NULL, Discrete 4 * 32 bit
2 EVENTS 0 - 65535 0 - 100 0 - 65535 na Supports NULL, Discrete 2 * 16 bit
3 DEBUG 0 - 65535 0 - 100 0 - 65535 na Supports NULL, Discrete 4 * 32 bit
4 0 FS Code 0 - 65535 0 - 100 0 - 65535 na Supports NULL, Discrete 1 * 16 bit
1 Events 0 - 65535 0 - 100 0 - 65535 na Supports NULL, Discrete 2 * 16 bit