Поворот дисплея в зависимости от HDMI или композитного выхода

Я отредактировал файл config.txt и добавил display_rotate = 1, чтобы получить портретный дисплей на маленьком 7-дюймовом экране. для меньшего экрана, но когда я подключаю свою малину Pi к телевизору с помощью HDMI, мне нужно, чтобы экран поворачивался на 90 градусов до пейзажного экрана.

Есть ли способ определить, подключен ли HDMI /не подключен и только затем поворачивать дисплей?

3 голоса | спросил Martin Harvey 27 52015vEurope/Moscow11bEurope/MoscowFri, 27 Nov 2015 20:11:11 +0300 2015, 20:11:11

3 ответа


1

Это, безусловно, можно обнаружить. Примером может служить мой скрипт для /etc/rc.local.

Вопрос в том, можете ли вы сделать что-нибудь полезное с этим, так как код для поворота фреймбуфера запускается в начале процесса загрузки, и вы не можете изменить поворот. Когда я хочу повернуть свой экран, я меняю config.txt, затем перезагружаюсь. Это некрасиво, но это только добавляет 30 секунд к времени загрузки.

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
fi

# If running headless (i.e. default RCA video)
if /opt/vc/bin/tvservice -s | grep 'NTSC\|PAL'; then
  echo $(hostname) is running Headless
  /opt/vc/bin/tvservice -s
else
  echo $(hostname) is running hdmi
fi
ответил Milliways 28 62015vEurope/Moscow11bEurope/MoscowSat, 28 Nov 2015 02:04:07 +0300 2015, 02:04:07
1

IIRC сигнал «HDMI detect» подключается к одному из контактов GPIO на ядре Broadcom SoC в основе Pi - поэтому должен быть в состоянии обнаружить его состояние, хотя возможно, не через библиотеку wiringPi - tvservice может дать вам некоторую полезную информацию в сценарии оболочки, с помощью Я думаю , статус -s или -m отслеживать аргументы HDMI.

С точки зрения электроники и смотря на стр. 2 схемы Rev2.1, я проследил соединение «HDMI_HPD_P» (контакт 19 - обнаружение горячей замены на разъеме HDMI), чтобы навести M6 BCM2835, который с меткой GPIO46 (и с точки зрения GPIO, нумерация его соседей - это GPIO45, являющийся «PWM1_OUT» и GPIO47, «SD_CARD_DET»), поэтому я чувствую, что вы можете обнаружить состояние вывода с некоторым низкоуровневым кодом «C», работающим как суперпользователь , но было бы гораздо безопаснее попытаться найти существующую библиотеку, которая сделает это таким образом, чтобы минимизировать риски потенциально повреждающих побочных эффектов системы . Например. попытка получить доступ к этому выводу может действительно работать на группе из 8 контактов, и если некоторые из те участвуют в чтении и записи с /на SD-карту, что потенциально может испортить данные на карте.

ответил SlySven 27 52015vEurope/Moscow11bEurope/MoscowFri, 27 Nov 2015 20:45:06 +0300 2015, 20:45:06
1

здесь указано что:

  

Pi использует сигнал hotplug HDMI, чтобы определить, подключен ли HDMI. Если он не обнаружен, он возвращается к составному.

, что, в свою очередь, предполагает, что существует определенное программное обеспечение для обнаружения изменения статуса hotplug. Но что делает трюк?

@ Предложение SlySven использовать /opt/vc/bin/tvservice -s попадает в голову гвоздя.

Пример вывода Pi с подключенным HDMI:

  

состояние 0x12001a [HDMI CEA (16) RGB lim 16: 9], 1920x1080 @ 60.00Hz, прогрессивный

и с отсоединенным кабелем:

  

состояние 0x120019 [HDMI CEA (16) RGB lim 16: 9], 1920x1080 @ 60.00Hz, прогрессивный

Пришло время взглянуть на tvservice источник (или, точнее, userland /interface /vmcs_host /vc_hdmi.h). Они удобно предоставляют нам перечисление VC_HDMI_NOTIFY_T, которое, по сути, говорит нам все, что нам нужно знать:

  

typedef enum {

     

VC_HDMI_UNPLUGGED = (1 <0), /* Отсоединен кабель HDMI * /

     

VC_HDMI_ATTACHED = (1 <1), /* Кабель HDMI подключен, но не включен * /

     

[...]

     

} VC_HDMI_NOTIFY_T;

Итак, все, что нам нужно сделать, это проверить минимальный бит - если он установлен, кабель отключен. Таким образом, казалось бы, что запуск tvservice -s и корректный анализ состояния должны включить, чтобы определить, подключен ли HDMI или нет.

ответил Ghanima 27 52015vEurope/Moscow11bEurope/MoscowFri, 27 Nov 2015 22:09:44 +0300 2015, 22:09:44

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132