add ir
This commit is contained in:
parent
7a74991910
commit
e8452bef7c
@ -114,19 +114,24 @@ class IrRemoteService(QObject):
|
|||||||
ready, _, _ = select.select([f], [], [], 0.1)
|
ready, _, _ = select.select([f], [], [], 0.1)
|
||||||
if not ready:
|
if not ready:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# Читаем событие (16 байт: tv_sec, tv_usec, type, code, value)
|
# Читаем событие (24 байта: tv_sec, tv_usec, type, code, value)
|
||||||
data = f.read(24)
|
data = f.read(24)
|
||||||
if len(data) < 24:
|
if len(data) < 24:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
tv_sec, tv_usec, ev_type, ev_code, ev_value = struct.unpack("llHHI", data)
|
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:
|
if ev_type == EV_MSC and ev_code == MSC_SCAN:
|
||||||
scancode = f"0x{ev_value:02x}"
|
scancode = f"0x{ev_value:02x}"
|
||||||
self._handle_scancode(scancode)
|
self._handle_scancode(scancode)
|
||||||
|
|
||||||
|
# Обрабатываем EV_KEY события (отпускание кнопки)
|
||||||
|
elif ev_type == EV_KEY and ev_value == KEY_UP:
|
||||||
|
# Кнопка отпущена - сбрасываем состояние
|
||||||
|
self.reset_button_state()
|
||||||
|
|
||||||
except (OSError, IOError):
|
except (OSError, IOError):
|
||||||
# Устройство недоступно, ждём и пробуем снова
|
# Устройство недоступно, ждём и пробуем снова
|
||||||
import time
|
import time
|
||||||
|
|||||||
@ -17,6 +17,7 @@ from screens.media import MediaScreen
|
|||||||
from screens.stub import StubScreen
|
from screens.stub import StubScreen
|
||||||
from screens.settings import SettingsScreen
|
from screens.settings import SettingsScreen
|
||||||
from services.bluetooth_service import BluetoothService
|
from services.bluetooth_service import BluetoothService
|
||||||
|
from services.ir_remote_service import IrRemoteService
|
||||||
from controllers.media_controller import MediaController
|
from controllers.media_controller import MediaController
|
||||||
|
|
||||||
|
|
||||||
@ -104,6 +105,10 @@ class MainWindowNew(QMainWindow):
|
|||||||
self._bt_service = BluetoothService(self)
|
self._bt_service = BluetoothService(self)
|
||||||
self._media_controller = MediaController(self._bt_service, 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.media_screen = MediaScreen(self._media_controller)
|
||||||
self.stack.addWidget(self.media_screen) # 0
|
self.stack.addWidget(self.media_screen) # 0
|
||||||
self.stack.addWidget(StubScreen("Car")) # 1
|
self.stack.addWidget(StubScreen("Car")) # 1
|
||||||
@ -146,6 +151,69 @@ class MainWindowNew(QMainWindow):
|
|||||||
mode_text = "Bluetooth" if self._source_mode == "bluetooth" else "CarPlay"
|
mode_text = "Bluetooth" if self._source_mode == "bluetooth" else "CarPlay"
|
||||||
self.lbl_source.setText(f"Media • {mode_text}")
|
self.lbl_source.setText(f"Media • {mode_text}")
|
||||||
self.lbl_bt.setText(self.media_screen.source.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):
|
def apply_theme(self):
|
||||||
self.app.setStyleSheet(THEME_NIGHT if self.is_night else THEME_DAY)
|
self.app.setStyleSheet(THEME_NIGHT if self.is_night else THEME_DAY)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user