custom IR
This commit is contained in:
109
debug_decoder.py
Normal file
109
debug_decoder.py
Normal file
@@ -0,0 +1,109 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Debug script for the custom IR protocol decoder
|
||||
"""
|
||||
|
||||
import json
|
||||
import sys
|
||||
import os
|
||||
from custom_ir_protocol import CustomIRProtocol
|
||||
|
||||
def debug_single_signal():
|
||||
"""Debug a single 71-pulse signal in detail"""
|
||||
|
||||
# Load captured signals
|
||||
with open("ir_analysis_20250927_190536.json", 'r') as f:
|
||||
signals = json.load(f)
|
||||
|
||||
# Get first 71-pulse signal
|
||||
signal = None
|
||||
for s in signals:
|
||||
if s['pulse_count'] == 71:
|
||||
signal = s
|
||||
break
|
||||
|
||||
if not signal:
|
||||
print("No 71-pulse signal found!")
|
||||
return
|
||||
|
||||
# Create custom protocol decoder
|
||||
protocol = CustomIRProtocol("DEBUG_CUSTOM")
|
||||
|
||||
print("Debugging 71-pulse signal:")
|
||||
print("=" * 50)
|
||||
|
||||
pulses = signal['pulses']
|
||||
print(f"Total pulses: {len(pulses)}")
|
||||
print()
|
||||
|
||||
# Convert to the format expected by the decoder
|
||||
formatted_pulses = []
|
||||
for j, duration_us in enumerate(pulses):
|
||||
is_pulse = (j % 2 == 0) # Alternating pulse/space
|
||||
duration_seconds = duration_us / 1000000.0
|
||||
formatted_pulses.append((is_pulse, duration_seconds))
|
||||
|
||||
# Convert to microseconds for analysis
|
||||
pulse_times = [duration * 1000000 for _, duration in formatted_pulses]
|
||||
|
||||
print("Header analysis:")
|
||||
if len(pulse_times) >= 2:
|
||||
header_pulse = pulse_times[0]
|
||||
header_space = pulse_times[1]
|
||||
print(f" Header pulse: {header_pulse:.0f}μs (expected: {protocol.HEADER_PULSE}μs)")
|
||||
print(f" Header space: {header_space:.0f}μs (expected: {protocol.HEADER_SPACE}μs)")
|
||||
print(f" Header pulse match: {protocol._is_timing_match(header_pulse, protocol.HEADER_PULSE)}")
|
||||
print(f" Header space match: {protocol._is_timing_match(header_space, protocol.HEADER_SPACE)}")
|
||||
print()
|
||||
|
||||
# Find data end
|
||||
data_end = protocol._find_data_end(pulse_times[2:])
|
||||
print(f"Data end found at index: {data_end}")
|
||||
print(f"Data section length: {data_end} pulses")
|
||||
print()
|
||||
|
||||
# Analyze data bits
|
||||
if data_end:
|
||||
data_pulses = pulse_times[2:2+data_end]
|
||||
print(f"Data pulses to analyze: {len(data_pulses)}")
|
||||
print()
|
||||
|
||||
print("First 10 data bit pairs:")
|
||||
for i in range(0, min(20, len(data_pulses)), 2):
|
||||
if i + 1 < len(data_pulses):
|
||||
pulse_time = data_pulses[i]
|
||||
space_time = data_pulses[i + 1]
|
||||
|
||||
pulse_match = protocol._is_timing_match(pulse_time, protocol.BIT_PULSE)
|
||||
space_0_match = protocol._is_timing_match(space_time, protocol.BIT_0_SPACE)
|
||||
space_1_match = protocol._is_timing_match(space_time, protocol.BIT_1_SPACE)
|
||||
|
||||
bit_value = "?"
|
||||
if space_0_match:
|
||||
bit_value = "0"
|
||||
elif space_1_match:
|
||||
bit_value = "1"
|
||||
|
||||
print(f" Bit {i//2}: {pulse_time:.0f}μs pulse, {space_time:.0f}μs space -> {bit_value}")
|
||||
print(f" Pulse match: {pulse_match}, Space 0 match: {space_0_match}, Space 1 match: {space_1_match}")
|
||||
|
||||
print()
|
||||
|
||||
# Try to decode
|
||||
print("Attempting decode...")
|
||||
address, command = protocol._decode_data_bits(data_pulses)
|
||||
print(f"Decode result: address={address}, command={command}")
|
||||
|
||||
if address is not None and command is not None:
|
||||
result = f"CUSTOM_{address:04X}_{command:04X}"
|
||||
print(f"Final result: {result}")
|
||||
else:
|
||||
print("Decode failed!")
|
||||
|
||||
# Try the full decode
|
||||
print("\nFull decode attempt:")
|
||||
result = protocol.decode(formatted_pulses)
|
||||
print(f"Full decode result: {result}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
debug_single_signal()
|
||||
Reference in New Issue
Block a user