#!/usr/bin/env python3 """Examine binary structure of action mappings to understand input/output actions and parameters""" import sys sys.path.insert(0, r'C:\DEV\COPILOT\geutebruck-api\src\api') import grpc from protos import configuration_pb2 from protos import configuration_pb2_grpc def examine_binary_structure(): """Request full binary dump of action mappings to analyze structure""" print("Connecting to SDK Bridge...") with grpc.insecure_channel('localhost:50051') as channel: stub = configuration_pb2_grpc.ConfigurationServiceStub(channel) # Read complete configuration to get raw binary data request = configuration_pb2.ReadConfigurationRequest() try: response = stub.ReadConfiguration(request) # Save the complete binary config for analysis with open("gevisoft_config.dat", "wb") as f: f.write(response.configData) print(f"Saved {len(response.configData)} bytes to gevisoft_config.dat") # Let's examine bytes around offset 253894 (first action mapping) offset = 253894 window = 500 print(f"\nBytes around offset {offset} (first action mapping):") print("=" * 80) start = max(0, offset - 50) end = min(len(response.configData), offset + window) data = response.configData[start:end] # Print hex dump for i in range(0, len(data), 16): hex_bytes = ' '.join(f'{b:02X}' for b in data[i:i+16]) ascii_chars = ''.join(chr(b) if 32 <= b < 127 else '.' for b in data[i:i+16]) print(f"{start + i:08X}: {hex_bytes:<48} | {ascii_chars}") return True except grpc.RpcError as e: print(f"\nError: {e.code()}") print(f"Details: {e.details()}") return False if __name__ == '__main__': examine_binary_structure()