Skip to main content

BLE Scan Filters — CFMoto App

Status: CONFIRMED from jadx decompilation.


TBox Path (BleModel — 450-series motorcycles)

  • Scans by MAC address only (stored from server after vehicle binding).
  • ScanFilter.Builder().setDeviceAddress(mac)
  • Scan settings: ScanMode.LOW_LATENCY (mode 2), reportDelay = 0, useHardwareBatchingIfSupported = true, legacy = false
  • Scan scan initiated by scannerAndConnect(); stopped on first match.
  • No name-based filtering for the 450-series.

Source: BleModel.java


Youth Path (BleModelYouth — child bikes)

Two sub-cases depending on device:

By MAC address (default)

  • BluetoothAdapter.checkBluetoothAddress(name)ScanFilter.setDeviceAddress(mac)

By device name (if input is not a valid MAC)

  • ScanFilter.Builder().setDeviceName(name)

After scan result:

  • If device name starts with "9RH0N" (CF110-AY10), "EC30E" (CF1000DY), or "ED20E" (CF650DY):
    • Read ManufacturerSpecificData(53199) from scan record
    • Bytes [0..5] = MAC address, bytes [6..12] = 7-char password
    • Use scan record bytes for auth during GATT connect
  • Otherwise: plain GATT connect without scan record

Scan timeout: 15 000 ms (SCAN_TIMEOUT handler message 1).

Source: BleModelYouth.java, CarFilter.java, Cf110Utils.java


  • Scans by device name using BleScanRuleConfig (FastBLE API)
  • No specific name pattern visible in public constants; set at runtime.

Manufacturer ID

ID (decimal)ID (hex)Used by
531990xCFCFCF110-type devices (scan record contains MAC + password)

Device Name Patterns

PrefixModelProtocol
9RH0NCF110-AY10CF110 GATT auth
EC30ECF1000DYCF110 GATT auth
ED20ECF650DYCF110 GATT auth
(any other)Unknown youthHH40 SPP protocol
(MAC only, 450-series)CFMoto 450 MT/SR/NKTBox protocol