Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Played around with the format a bit and made a Kaitai format if anybody else wants to play with it. Not confident about the year, but I have observed some timestamps based on date of manufacture if the device came out approximately 2016. The rest seems to line up rather well as bit-packed integers.

Kaitai Structured Output:

  0 [BpMsg]: 2025-11-10 11:03 - SYS:137, DIA:113, OPP:121, MAP:121, PP:24, HR:67
      unk1 = 0xA = 10
      sys = 0x89 = 137
      dia = 0x71 = 113
      hr = 0x43 = 67
      timestamp [Datetime]: 2025-11-10 11:03
          yearMinus2016 = 0x9 = 9
          month = 0xB = 11
          day = 0xA = 10
          hour = 0xB = 11
          min = 0x3 = 3
          paddedDay = 10
          paddedHour = 11
          paddedMin = 03
          paddedMonth = 11
          year = 2025
      unk2 = 0x50 = 80
      opp = 0x79 = 121
      unk3 = 0x0 = 0
      unk4 = 0x0 = 0
      unk5 = 0x0 = 0
      unk6 = 0x0 = 0
      unk7 = 0x0 = 0
      unk8 = 0x0 = 0
      map = 0x79 = 121
      pp = 0x18 = 24
  1 [BpMsg]: 2025-11-10 11:31 - SYS:132, DIA:86, OPP:95, MAP:101, PP:46, HR:68
  2 [BpMsg]: 2025-11-10 12:01 - SYS:126, DIA:84, OPP:90, MAP:98, PP:42, HR:82
  3 [BpMsg]: 2025-11-10 12:35 - SYS:128, DIA:80, OPP:86, MAP:96, PP:48, HR:61
KSY:

  meta:
    id: bp
    title: BP Msg Format
    endian: le
  seq:
    - id: msgs
      type: bp_msg
      repeat: eos
  types:
    datetime:
      -webide-representation: '{year:dec}-{padded_month}-{padded_day} {padded_hour}:{padded_min}'
      seq:
        - id: year_minus_2016
          type: b4
        - id: month
          type: b4
        - id: day
          type: b5
        - id: hour
          type: b5
        - id: min
          type: b6
      instances:
        padded_day:
          value: '(day <= 9 ? "0" : "") + day.to_s'
        padded_month:
          value: '(month <= 9 ? "0" : "") + month.to_s'
        padded_min:
          value: '(min <= 9 ? "0" : "") + min.to_s'
        padded_hour:
          value: '(hour <= 9 ? "0" : "") + hour.to_s'
        year:
          value: (year_minus_2016 + 2016).to_s
    bp_msg:
      -webide-representation: '{timestamp} - SYS:{sys:dec}, DIA:{dia:dec}, OPP:{opp:dec}, MAP:{map:dec}, PP:{pp:dec}, HR:{hr:dec}'
      seq:
        - id: unk1
          type: u1
        - id: sys
          type: u1
        - id: dia
          type: u1
        - id: hr
          type: u1
        - id: timestamp
          type: datetime
        - id: unk2
          type: u1
        - id: opp
          type: u1
        - id: unk3
          type: u1
        - id: unk4
          type: u1
        - id: unk5
          type: u1
        - id: unk6
          type: u1
        - id: unk7
          type: u1
        - id: unk8
          type: u1
      instances:
        pp:
          value: sys - dia
        map:
          value: (2 * dia + sys) / 3


Using the following hex dump as my source "binary":

  0a89 7143 9b52 c350 7900 0000 0000 0000  ..qC.R.Py.......
  8456 449b 52df 505f 0000 0000 0000 007e  .VD.R.P_.......~
  5452 9b53 0150 5a00 0000 0000 000a 8050  TR.S.PZ........P
  3d9b 5323 5056 0000 0000 0000 0094 5d41  =.S#PV........]A
  9b53 4050 6700 0000 0000 0000 795c 4a9b  .S@Pg.......y\J.
  535e 506a 0000 0000 0000 007b 5341 9b53  S^Pj.......{SA.S
  5f50 5a00 0000 0000 0000 7b4f 4e9b 5381  _PZ.......{ON.S.
  5058 0000 0000 0000                      PX......


Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: