Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python3
- import json
- import sys
- if len(sys.argv) != 2:
- print(f"Usage: {sys.argv[0]} dq.json", file=sys.stderr)
- sys.exit(1)
- path = sys.argv[1]
- # --- 1. Read JSON events ----------------------------------------------------
- events = []
- with open(path, "r") as f:
- for line in f:
- line = line.strip()
- if not line:
- continue
- events.append(json.loads(line))
- if not events:
- print("No events found in file.", file=sys.stderr)
- sys.exit(1)
- # --- 2. Extract low pulses (1 -> 0, then 0 -> 1) ----------------------------
- pulses = [] # list of (start_time, width)
- prev = events[0]
- for i in range(1, len(events)):
- cur = events[i]
- # falling edge: 1 -> 0
- if prev["v"] == 1 and cur["v"] == 0:
- start_t = cur["t"]
- # search for next rising edge 0 -> 1
- width = None
- for j in range(i + 1, len(events)):
- nxt = events[j]
- if nxt["v"] == 1:
- width = nxt["t"] - start_t
- break
- if width is not None:
- pulses.append((start_t, width))
- prev = cur
- # --- 3. Convert pulse widths to bits ----------------------------------------
- bits = []
- for start_t, width in pulses:
- # Ignore reset/presence etc. (very long pulses)
- if width <= 10:
- bits.append(1)
- elif 40 <= width <= 80:
- bits.append(0)
- else:
- # probably reset (≈480) or presence (≈150) -> skip
- continue
- if not bits:
- print("No data bits found (check thresholds).", file=sys.stderr)
- sys.exit(1)
- # --- 4. Group bits into bytes (LSB-first) -----------------------------------
- bytes_out = []
- for i in range(0, len(bits), 8):
- chunk = bits[i:i+8]
- if len(chunk) < 8:
- break
- val = 0
- for bit_index, b in enumerate(chunk):
- val |= (b & 1) << bit_index # LSB-first
- bytes_out.append(val)
- # --- 5. Print result ---------------------------------------------------------
- hex_str = " ".join(f"{b:02x}" for b in bytes_out)
- ascii_str = "".join(chr(b) if 32 <= b < 127 else "." for b in bytes_out)
- print("Hex bytes:")
- print(hex_str)
- print("\nASCII (non-printables shown as '.'):")
- print(ascii_str)
Advertisement
Add Comment
Please, Sign In to add comment