Skip to main content

Bike Data Fields — CFMoto App

Status: CONFIRMED from jadx decompilation. Extracted from proto definitions and parsing code.


1. TBox Telemetry — BluetoothOuterClass.Bluetooth Protobuf

This is the primary telemetry message used for HH40-type devices and potentially the 450-series. It is also parsed in BleModelYouth.parseHH40(). All fields are protobuf int32 unless noted.

Field NameProto Field#DescriptionNotes
codec1String fieldAuthentication/codec string
sn2String fieldSerial number
result3Command result0 = success
type4Device/message typeInterpreted per command
vin5VIN number
speed6Vehicle speedUnits: see speedUnit
powerPer7Battery percentage0–100%
reMileage8Remaining mileageUnits: see mileUnit
mileage9Total mileage / odometerUnits: see mileUnit
batTmp10Battery temperature
mileUnit11Mileage unit0 = km, 1 = miles
speedUnit12Speed unit
value13Generic valueDivided by 10 for speed limit
dID14Fault code DIDDiagnostic ID
state15Vehicle state
time16Time value
distance17Distance
call18Call status
valid19GPS validity
longitude20GPS longitudeScaled integer
latitude21GPS latitudeScaled integer
gPSRxLev22GPS signal level
sos23SOS status
transGearPos24Transmission gear position
inverterActTemp25Inverter actual temperature
motorActTemp26Motor actual temperature
actTorq27Actual torque
actHVCur28HV actual currentHigh-voltage current
actHVVolt29HV actual voltageHigh-voltage voltage
serialNum30Serial number (int)
hardwareVer31Hardware version
softVer32Software version
battCurr33Battery current
battVolt34Battery voltage
battVoltCelladd35Battery cell voltage (address)
battSOH36Battery state of health
tempSensorTempMaxNum37Temp sensor max temp number
tempSensorMaxTemp38Temp sensor maximum temp
tempSensorTempMinNum39Temp sensor min temp number
tempSensorMinTemp40Temp sensor minimum temp
altitude41Altitude
angle42Angle/heading
coordinateSystem43GPS coordinate system
action44Action/command
dID145Second fault code DID

2. HH40 Parsed Events

When a HH40 notification arrives (command byte b at bArr[2]), the payload is a BluetoothOuterClass.Bluetooth protobuf. Fields used per command:

Command ByteEvent / Data
1Vehicle type → modelCar = from.getType()
3VehicleBaseInfoYouthEvent(speed, batTmp, reMileage, mileage, powerPer)
4Unit settings: mileUnit, speedUnit, value/10 = max speed
5HH40FaultCodeEvent(dID, dID1)
6KeyInfoYouthEvent(state, time, powerPer)
10Vehicle over-distance reminder (SOS type 1)
11Vehicle reminder stop (type 0)
15GPS location: longitude, latitudeHH40GpsEvent
-111Lock response: result == 1 = success
-110Over-distance setting reply

3. CF110 Parsed Data

Command byte at bArr[2] in CF110 format, payload starts at bArr[5]:

DeviceInfo (cmd = 10)

Parsed from 30-byte payload at offset i:

OffsetSizeTypeFieldDescription
08double LElatLatitude (IEEE 754 double, little-endian)
88double LElngLongitude (IEEE 754 double, little-endian)
164float LEspeedSpeed (IEEE 754 float, little-endian)
202uint16 LEageGPS age
241uint8updateIdUpdate sequence ID
251int8uSizeNumber of satellites
261int8isCrossGeo-fence status (2 = crossed)
271int8isOverSpeedOver-speed status
281int8rOnOffStateUnlock state
291int8lOnOffStatePower state

Limit/fence state values for isCross and isOverSpeed:

ValueMeaning
0Normal
1First alarm
2Stop limiting
3Temporarily running
4GPS timeout

CarSettingInfo (cmd = 11)

26-byte payload:

OffsetSizeTypeFieldDescription
08double LElatGeo-fence center latitude
88double LElngGeo-fence center longitude
164float LEspeedSpeed limit (km/h)
202uint16 LEradiusGeo-fence radius (meters / 10 for display)
221uint8alarmTAlarm time (seconds)
231uint8stopTStop time (seconds), default 30
241uint8runTRun time (seconds), default 30
251uint8rOnOffState0 = locked, 1 = unlocked

BleCmdResult (cmd = 14)

2-byte payload:

OffsetSizeTypeFieldDescription
01uint8cmdCommand being ack'd
11uint8result0 = success

DevVersion (cmd = 15)

(Fields not fully exposed but parsed from DevVersion.update(bArr, i2))

DevUpdateInfo (cmd = 16)

(Fields not fully exposed but parsed from DevUpdateInfo.update(bArr, i2))


4. TBox Telemetry Fields (Meter.proto — non-Bluetooth)

From Meter.java protobuf interfaces:

Meter.Response

  • success (int)

Meter.KL15

  • kL15 (int) — ignition line status

Meter.Navi / NaviOrBuilder

  • direction (Navi.Direction enum)
  • distance (int)

Meter.Route

  • direction (int)
  • distance (int)

Meter.Display

Units settings:

  • distance (DistanceUnit enum)
  • distanceValue (int)
  • temperature (TemperatureUnit enum)
  • temperatureValue (int)
  • time (TimeUnit enum)
  • timeValue (int)
  • languageType (LanguageType enum)
  • languageTypeValue (int)

Meter.LightType enum

ValueNameDescription
0NONE2No light operation
1RIGHT_OPENRight turn on
2RIGHT_CLOSERight turn off
3LEFT_OPENLeft turn on
4LEFT_CLOSELeft turn off

5. Encoding Conventions

  • Multi-byte integers: Little-endian (bytes2Int, bytes2Int32 in CommonTool.java).
  • Float: IEEE 754 little-endian (4 bytes).
  • Double: IEEE 754 little-endian (8 bytes).
  • 2-byte int read: (bArr[i] & 0xFF) | (bArr[i+1] << 8) in CommonTool.bytes2Int.
  • 4-byte int read: similar LE pattern.
  • GPS coordinates: stored as raw double (degrees), not scaled integers.
  • Speed: raw float km/h (CF110 path) or raw int (HH40 protobuf path, divide by unit).