"""GATT Characteristic UUIDs for Dangerous Pi BLE interface. This module defines the UUIDs for all GATT services and characteristics used by the Dangerous Pi BLE interface. UUID Namespace: Dangerous Pi uses custom 128-bit UUIDs. Format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12 hex chars) Services are differentiated by the 5th group: - PM3: 0000xxxx (0000-000f) - WiFi: 0001xxxx (0010-001f) - System: 0002xxxx (0020-002f) - Update: 0003xxxx (0030-003f) """ from dataclasses import dataclass def _uuid(suffix: str) -> str: """Generate a Dangerous Pi UUID with the given 4-char suffix. Args: suffix: 4-character hex suffix (e.g., "0001", "0010") Returns: Full 128-bit UUID string """ return f"d4c3b2a1-0000-1000-8000-00805f9b{suffix}" @dataclass class PM3CharacteristicUUIDs: """PM3 GATT Service and Characteristics. Service for Proxmark3 operations (command execution, status). """ # Service UUID SERVICE = _uuid("0000") # Characteristics COMMAND_WRITE = _uuid("0001") # Write: Execute PM3 command COMMAND_RESULT = _uuid("0002") # Notify: Command result STATUS = _uuid("0003") # Read: Get PM3 status SESSION_CREATE = _uuid("0004") # Write: Create session SESSION_RELEASE = _uuid("0005") # Write: Release session SESSION_INFO = _uuid("0006") # Read: Get session info @dataclass class WiFiCharacteristicUUIDs: """WiFi GATT Service and Characteristics. Service for WiFi network management (scan, connect, status). """ # Service UUID SERVICE = _uuid("0010") # Characteristics STATUS = _uuid("0011") # Read: Get WiFi status SCAN = _uuid("0012") # Write: Trigger scan, Notify: Results CONNECT = _uuid("0013") # Write: Connect to network DISCONNECT = _uuid("0014") # Write: Disconnect MODE = _uuid("0015") # Read/Write: WiFi mode SAVED_NETWORKS = _uuid("0016") # Read: Get saved networks FORGET_NETWORK = _uuid("0017") # Write: Forget network @dataclass class SystemCharacteristicUUIDs: """System GATT Service and Characteristics. Service for system operations (info, shutdown, restart). """ # Service UUID SERVICE = _uuid("0020") # Characteristics INFO = _uuid("0021") # Read: Get system info SHUTDOWN = _uuid("0022") # Write: Initiate shutdown RESTART = _uuid("0023") # Write: Initiate restart LOGS = _uuid("0024") # Read: Get service logs @dataclass class UpdateCharacteristicUUIDs: """Update GATT Service and Characteristics. Service for software update management. """ # Service UUID SERVICE = _uuid("0030") # Characteristics CHECK = _uuid("0031") # Write: Check for updates, Notify: Result DOWNLOAD = _uuid("0032") # Write: Download update INSTALL = _uuid("0033") # Write: Install update PROGRESS = _uuid("0034") # Read/Notify: Update progress RELEASE_NOTES = _uuid("0035") # Read: Get release notes # Characteristic properties class CharacteristicProperties: """Standard GATT characteristic properties.""" READ = "read" WRITE = "write" WRITE_WITHOUT_RESPONSE = "write-without-response" NOTIFY = "notify" INDICATE = "indicate" # Characteristic descriptors CHARACTERISTIC_USER_DESCRIPTION_UUID = "00002901-0000-1000-8000-00805f9b34fb" CLIENT_CHARACTERISTIC_CONFIG_UUID = "00002902-0000-1000-8000-00805f9b34fb"