From 6a37695f0b0bef8db2a25f3797c385efa572124f Mon Sep 17 00:00:00 2001 From: pstruebi Date: Thu, 18 Dec 2025 16:17:07 +0100 Subject: [PATCH] feat: load i2c-dev kernel module on startup Ensure i2c-dev kernel module is loaded before initializing I2C communication to guarantee /dev/i2c-* device access. Add error handling and logging for module loading process. --- src/auracast/server/multicast_server.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/auracast/server/multicast_server.py b/src/auracast/server/multicast_server.py index 1b616e8..3401679 100644 --- a/src/auracast/server/multicast_server.py +++ b/src/auracast/server/multicast_server.py @@ -146,6 +146,25 @@ _stream_lock = asyncio.Lock() # serialize initialize/stop_audio on API side async def _init_i2c_on_startup() -> None: + # Ensure i2c-dev kernel module is loaded (required for /dev/i2c-* access) + try: + proc = await asyncio.create_subprocess_exec( + "sudo", "modprobe", "i2c-dev", + stdout=asyncio.subprocess.PIPE, + stderr=asyncio.subprocess.PIPE, + ) + stdout, stderr = await proc.communicate() + if proc.returncode != 0: + log.warning( + "modprobe i2c-dev failed (rc=%s): %s", + proc.returncode, + (stderr or b"").decode(errors="ignore").strip(), + ) + else: + log.info("i2c-dev module loaded successfully") + except Exception as e: + log.warning("Exception running modprobe i2c-dev: %s", e, exc_info=True) + # Table of (register, expected_value) dev_add = "0x4a" reg_table = [ -- 2.52.0