@@ -202,18 +202,18 @@ def set_volume(self, level=None, mute=False):
202202 if not self ._ensure_available ():
203203 return
204204
205- # Handle mute toggle
206- if mute and not self ._assumed_mute :
207- self ._send_mute_toggle ()
208- self ._assumed_mute = True
209- self ._assumed_volume = 0 # muted = effectively 0
210- logging .info ('CEC: muted TV' )
211- elif not mute and self ._assumed_mute :
212- self ._send_mute_toggle ()
205+ if mute :
206+ # Instead of mute toggle — 100 steps down (guaranteed 0)
207+ if self ._assumed_volume > 0 or not self ._assumed_mute :
208+ logging .info ('CEC: mute → 100 steps down (was %d)' , self ._assumed_volume )
209+ self ._volume_steps ('down' , 100 )
210+ self ._assumed_volume = 0
211+ self ._assumed_mute = True
212+ return
213+
214+ # Unmute: already at 0 — just clear the flag
215+ if self ._assumed_mute :
213216 self ._assumed_mute = False
214- # After unmute, volume resets to 0 from TV perspective
215- # (we set it to 0 on mute, so it stays 0)
216- logging .info ('CEC: unmuted TV' )
217217
218218 if level is None :
219219 return
@@ -235,31 +235,10 @@ def set_volume(self, level=None, mute=False):
235235 self ._assumed_volume = level
236236 except Exception as e :
237237 logging .warning ('CEC: volume change failed: %s' , e )
238- # Lost tracking — assume 0 (safest default)
239238 self ._assumed_volume = 0
240239
241240 # -- volume internals -------------------------------------------------
242241
243- def _send_mute_toggle (self ):
244- """Send a single mute toggle (CEC User Control: Mute)."""
245- try :
246- subprocess .run (
247- [
248- 'cec-ctl' , '-d' , self ._device , '--to' , '0' ,
249- '--user-control-pressed' , 'ui-cmd=mute' ,
250- ],
251- capture_output = True , timeout = 5 ,
252- )
253- subprocess .run (
254- [
255- 'cec-ctl' , '-d' , self ._device , '--to' , '0' ,
256- '--user-control-released' ,
257- ],
258- capture_output = True , timeout = 5 ,
259- )
260- except Exception as e :
261- logging .warning ('CEC: mute toggle failed: %s' , e )
262-
263242 def _volume_steps (self , direction , steps ):
264243 """Send N volume-up or volume-down key presses.
265244
0 commit comments