add ir
This commit is contained in:
parent
7a74991910
commit
e8452bef7c
@ -114,19 +114,24 @@ class IrRemoteService(QObject):
|
||||
ready, _, _ = select.select([f], [], [], 0.1)
|
||||
if not ready:
|
||||
continue
|
||||
|
||||
# Читаем событие (16 байт: tv_sec, tv_usec, type, code, value)
|
||||
|
||||
# Читаем событие (24 байта: tv_sec, tv_usec, type, code, value)
|
||||
data = f.read(24)
|
||||
if len(data) < 24:
|
||||
continue
|
||||
|
||||
|
||||
tv_sec, tv_usec, ev_type, ev_code, ev_value = struct.unpack("llHHI", data)
|
||||
|
||||
# Обрабатываем только MSC_SCAN события
|
||||
|
||||
# Обрабатываем MSC_SCAN события (скан-код)
|
||||
if ev_type == EV_MSC and ev_code == MSC_SCAN:
|
||||
scancode = f"0x{ev_value:02x}"
|
||||
self._handle_scancode(scancode)
|
||||
|
||||
|
||||
# Обрабатываем EV_KEY события (отпускание кнопки)
|
||||
elif ev_type == EV_KEY and ev_value == KEY_UP:
|
||||
# Кнопка отпущена - сбрасываем состояние
|
||||
self.reset_button_state()
|
||||
|
||||
except (OSError, IOError):
|
||||
# Устройство недоступно, ждём и пробуем снова
|
||||
import time
|
||||
|
||||
@ -17,6 +17,7 @@ from screens.media import MediaScreen
|
||||
from screens.stub import StubScreen
|
||||
from screens.settings import SettingsScreen
|
||||
from services.bluetooth_service import BluetoothService
|
||||
from services.ir_remote_service import IrRemoteService
|
||||
from controllers.media_controller import MediaController
|
||||
|
||||
|
||||
@ -104,6 +105,10 @@ class MainWindowNew(QMainWindow):
|
||||
self._bt_service = BluetoothService(self)
|
||||
self._media_controller = MediaController(self._bt_service, self)
|
||||
|
||||
# ИК-пульт
|
||||
self._ir_service = IrRemoteService(self)
|
||||
self._connect_ir_remote()
|
||||
|
||||
self.media_screen = MediaScreen(self._media_controller)
|
||||
self.stack.addWidget(self.media_screen) # 0
|
||||
self.stack.addWidget(StubScreen("Car")) # 1
|
||||
@ -146,6 +151,69 @@ class MainWindowNew(QMainWindow):
|
||||
mode_text = "Bluetooth" if self._source_mode == "bluetooth" else "CarPlay"
|
||||
self.lbl_source.setText(f"Media • {mode_text}")
|
||||
self.lbl_bt.setText(self.media_screen.source.text())
|
||||
|
||||
# Запускаем ИК-пульт
|
||||
self._ir_service.start()
|
||||
|
||||
def _connect_ir_remote(self):
|
||||
"""Подключить сигналы ИК-пульта."""
|
||||
# Треки
|
||||
self._ir_service.play_pause_clicked.connect(self._on_ir_play_pause)
|
||||
self._ir_service.next_track_clicked.connect(self._on_ir_next_track)
|
||||
self._ir_service.prev_track_clicked.connect(self._on_ir_prev_track)
|
||||
self._ir_service.next_track_hold.connect(self._on_ir_next_track_hold)
|
||||
self._ir_service.prev_track_hold.connect(self._on_ir_prev_track_hold)
|
||||
|
||||
# Громкость
|
||||
self._ir_service.volume_up_clicked.connect(self._on_ir_volume_up)
|
||||
self._ir_service.volume_down_clicked.connect(self._on_ir_volume_down)
|
||||
self._ir_service.volume_up_hold.connect(self._on_ir_volume_up_hold)
|
||||
self._ir_service.volume_down_hold.connect(self._on_ir_volume_down_hold)
|
||||
|
||||
def _on_ir_play_pause(self):
|
||||
"""Обработка кнопки Play/Pause с ИК-пульта."""
|
||||
if self._media_controller:
|
||||
self._media_controller.toggle_play()
|
||||
|
||||
def _on_ir_next_track(self):
|
||||
"""Обработка кнопки Next с ИК-пульта."""
|
||||
if self._media_controller:
|
||||
self._media_controller.next_track()
|
||||
|
||||
def _on_ir_prev_track(self):
|
||||
"""Обработка кнопки Prev с ИК-пульта."""
|
||||
if self._media_controller:
|
||||
self._media_controller.previous_track()
|
||||
|
||||
def _on_ir_next_track_hold(self):
|
||||
"""Обработка зажатия Next (перемотка вперед)."""
|
||||
# TODO: реализовать перемотку вперед
|
||||
pass
|
||||
|
||||
def _on_ir_prev_track_hold(self):
|
||||
"""Обработка зажатия Prev (перемотка назад)."""
|
||||
# TODO: реализовать перемотку назад
|
||||
pass
|
||||
|
||||
def _on_ir_volume_up(self):
|
||||
"""Обработка кнопки Громкость + с ИК-пульта."""
|
||||
# TODO: реализовать увеличение громкости
|
||||
pass
|
||||
|
||||
def _on_ir_volume_down(self):
|
||||
"""Обработка кнопки Громкость - с ИК-пульта."""
|
||||
# TODO: реализовать уменьшение громкости
|
||||
pass
|
||||
|
||||
def _on_ir_volume_up_hold(self):
|
||||
"""Обработка зажатия Громкость + (быстрое увеличение)."""
|
||||
# TODO: реализовать быстрое увеличение громкости
|
||||
pass
|
||||
|
||||
def _on_ir_volume_down_hold(self):
|
||||
"""Обработка зажатия Громкость - (быстрое уменьшение)."""
|
||||
# TODO: реализовать быстрое уменьшение громкости
|
||||
pass
|
||||
|
||||
def apply_theme(self):
|
||||
self.app.setStyleSheet(THEME_NIGHT if self.is_night else THEME_DAY)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user