Дисклеймер: Под названием HY-300 продаётся множество внешне похожих проекторов от разных производителей — с разными SoC, прошивками и аппаратными решениями. Всё описанное ниже относится к конкретному экземпляру на базе Rockchip RK3326 с прошивкой от TXCZ. У вашего HY-300 начинка может отличаться, и описанные методы могут не сработать или потребовать адаптации.
Купил портативный проектор HY-300 — один из тех бюджетных «карманных» проекторов на Android TV, которых полно на маркетплейсах. При первом включении заметил странность: на экране загрузки (статичный логотип) яркость выглядит на все 100%, но буквально через пару секунд, когда появляется boot-анимация, яркость ощутимо падает — и остаётся такой навсегда. В настройках проектора нет ни ползунка яркости, ни каких-либо параметров изображения. Вообще. Производитель просто не предусмотрел возможность настройки.
Это стало отправной точкой для исследования, которое привело нас от «а можно ли вообще подключиться?» до прямого редактирования gamma LUT в видеопроцессоре Rockchip.
Что имеем
HY-300: портативный проектор на базе SoC Rockchip RK3326 с Android TV OS. Характеристики, которые удалось вытащить:
SoC: Rockchip RK3326
ОС: Android TV (не обычный Android — это важно)
Разрешение: 1280x720, нативная панель 1024x600 (VOP масштабирует)
Производитель прошивки: TXCZ (Shenzhen TXCZ)
Дисплей: LVDS-панель, подключена через VOP (Video Output Processor)
Видеомост: RK628 (HDMI-to-MIPI CSI)
Проблема: Яркость проектора визуально ниже максимума, а в интерфейсе Android TV нет никаких настроек яркости, контраста, гаммы — ни в основных настройках, ни в скрытых, нигде. Производитель решил, что пользователю это не нужно.
Подключение: первые грабли
USB — ловушка
Первая мысль — подключить проектор к ПК через USB. У HY-300 есть USB-A порт, у ПК тоже USB-С. Взял кабель USB-A — USB-С, воткнул — проектор мгновенно вырубился.
Причина простая: оба устройства подают питание на шину (5V). Два источника питания встречаются — срабатывает защита, проектор уходит в перезагрузку.
Зарядка у проектора через круглый DC-разъём (240v всё-таки!), не USB. Micro-USB нет. Подключиться по проводу нельзя.
ADB по Wi-Fi — неожиданная удача
Остаётся ADB over WiFi. Обычно для этого нужно сначала включить Developer Options (многократно тапнуть «Build Number»). Но в Android TV нет пункта «Build Number» в привычном месте — нужно тапать «Android TV OS version». Я нашёл этот пункт, начал тапать... после 5 тапов вместо Developer Mode включился скринсейвер (часы на весь экран).
Решил попробовать наугад — вдруг ADB уже включен из коробки:
adb connect <IP проектора>:5555 adb root
ADB включен по умолчанию. Root доступен. Без каких-либо Developer Options. Спасибо, мой дорогой партия-друг TXCZ.
Что внутри: анатомия проблемы
Получив root-доступ, я начал искать механизм управления яркостью. И быстро понял, почему производитель не дал ползунок — стандартный Android-механизм яркости в этом проекторе сломан на уровне железа.
Backlight-драйвер: есть, но не работает
В device tree проектора есть узел backlight с compatible = "pwm-backlight" — стандартный PWM-драйвер подсветки Linux. Но у него отсутствует ключевое свойство pwms — драйвер не знает, к какому PWM-каналу подключена подсветка. Результат:
/sys/class/backlight/ # ПУСТО — драйвер не загружен
При этом Light HAL от Rockchip (android.hardware.lights-service.rockchip) честно пытается писать в /sys/class/backlight/backlight/brightness — но этого пути не существует. Все вызовы settings put system screen_brightness 255 уходят в пустоту.
LED — только вкл/выкл
echo 0 > /sys/class/leds/Lcd_power/brightness # лампа погасла echo 255 > /sys/class/leds/Lcd_power/brightness # лампа зажглась echo 128 > /sys/class/leds/Lcd_power/brightness # то же самое, что 255
GPIO-управление. Промежуточных значений нет - только 0 (выкл) и любое другое (вкл).
PWM-каналы: один занят, остальные выключены
pwmchip0 (ff200000.pwm) - используется для
vdd-arm(питание CPU), не для подсветкиff200010.pwm — пульт дистанционного управления
ff200020, ff200030, ff208000-ff208030 — все
disabledв device tree
Ни один PWM-канал не управляет LED-подсветкой.
PQ-система Rockchip: заниженная яркость в конфиге
Нашёл систему Picture Quality от Rockchip — библиотека libpq.so читает JSON-конфиги и применяет цветокоррекцию через DRM.
В конфиге для UI (pq_ui.json) обнаружилось:
"cscBrightness": 189 // нейтральное значение — 256. Яркость занижена на 26%!
Для сравнения, в конфиге видео (pq_play.json):
"cscBrightness": 256 // нейтральная, без занижения
То есть производитель намеренно снизил яркость UI на четверть относительно видео.
Что вообще НЕ влияло на яркость
Перечислю всё, что было испробовано, но безрезультатно:
Метод |
Результат |
|---|---|
|
Значение меняется, визуально — ноль эффекта |
|
Сбрасывается на 50 при каждой перезагрузке |
Перезапуск |
Сервис пишет в несуществующий путь |
|
|
|
HWC полностью игнорирует матрицу |
PQ-конфиг |
Минимальный эффект, fallback-пути не читаются |
|
|
Отдельная боль — попытка отредактировать pq_ui.json на vendor-разделе. Раздел заполнен на 100% (876 КБ свободно из 272 МБ). Команда sed -i создала временный файл, которому не хватило места, и уничтожила оригинал — файл стал 0 байт. Восстановить невозможно: cp на vendor молча создаёт файлы нулевого размера из-за dm-verity.
Прорыв: testgamma и gamma LUT
Перелом наступил, когда я заглянул в логи загрузки:
01-01 00:00:42.142 init: starting service 'testgamma'...
Сервис testgamma Нашёл его определение в /vendor/etc/init/hw/init.rk30board.rc:
service testgamma /system/bin/testgammatx.sh
Открываем скрипт:
#!/system/bin/sh testgamma --wb_r 1.0 --wb_g 0.96 --wb_b 0.95 --contrast 58 --brightness 30 \ --saturation 80 --hue 35 --target_gamma 1.8 --native_gamma 2.9
brightness 30 из 100. Вот она, причина. Производитель захардкодил яркость на 30% в shell-скрипте, который выполняется при каждой загрузке.
Как работает testgamma
Утилита testgamma — бинарник, который пишет gamma LUT (Look-Up Table, 256 записей формата 0x00RRGGBB) напрямую в VOP (Video Output Processor) Rockchip через DRM ioctl на /dev/dri/card0.
$ testgamma --help --brightness set brightness value[0, 100], default 50 --contrast set contrast value[0, 100], default 50 --saturation set saturation value[0, 100], default 50 --hue set hue value[0, 100], default 50 --wb_r set red gain of white balance, [0, 1], default 1.0 --wb_g set green gain of white balance, [0, 1], default 1.0 --wb_b set blue gain of white balance, [0, 1], default 1.0 --native_gamma set native gamma value, default 2.2 --target_gamma set target gamma value, default 2.2
Но есть нюанс. Параметры brightness, contrast, saturation, hue должны устанавливаться через DRM-свойства BCSH (Brightness/Contrast/Saturation/Hue) видеопроцессора. В логах видно:
brightness 0, old brightness 30, prop id 0 saturation 0, old saturation 80, prop id 0
prop id 0 — свойства не найдены. VOP Lite в RK3326 не поддерживает BCSH-свойства. Четыре из девяти параметров testgamma — пустышки. Они ни на что не влияют.
Что реально работает:
wb_r,wb_g,wb_b— коэффициенты white balance (0.0 — 1.0). Масштабируют каждый канал в gamma LUT. Это множитель яркости.target_gamma,native_gamma— определяют форму гамма-кривой. Экспонента = target/native. Значение 1.8/2.9 = 0.62 даёт sqrt-кривую, которая поднимает тёмные тона.
Почему testgamma работает только при загрузке
testgamma запускается как init-сервис — до SurfaceFlinger. Он пишет gamma LUT в VOP через DRM, и LUT применяется. Но как только стартует SurfaceFlinger с HWC (hwcomposer.rk30board.so), он захватывает DRM-устройство и перезаписывает настройки VOP каждый кадр. Вызов testgamma в рантайме записывает LUT в регистры, но HWC тут же его затирает.
Это подтверждается экспериментом:
testgamma в рантайме: LUT в debugfs (
/sys/kernel/debug/dri/0/ff460000.vop/gamma_lut) меняется, но визуально — никакого эффектаtestgamma при загрузке (через init-скрипт): визуальный эффект мгновенный и стабильный
Разблокировка записи в /system
Разделы /system и /vendor защищены dm-verity. Даже после mount -o remount,rw запись создаёт файлы нулевого размера. Решение:
adb disable-verity # disable-verity only works for userdebug builds # using overlayfs # Now reboot your device for settings to take effect adb reboot
После перезагрузки система монтирует overlayfs поверх /system и /vendor:
overlay on /system type overlay (lowerdir=/system, upperdir=/mnt/scratch/overlay/system/upper, ...)
Теперь mount -o remount,rw /system действительно делает раздел записываемым. Можно редактировать testgammatx.sh.
Результаты: от 10% до максимума
Систематически протестировал разные комбинации параметров. После каждого изменения — перезагрузка (другого пути нет).
wb_r/g/b |
target_gamma |
Результат |
|---|---|---|
0.1 / 0.1 / 0.1 |
2.2 |
~10% яркости — экран еле видно |
0.5 / 0.5 / 0.5 |
1.8 |
~50% яркости |
1.0 / 1.0 / 1.0 |
1.0 |
Максимальная яркость, но цвета «инвертированы» — слишком агрессивная гамма-коррекция |
1.0 / 1.0 / 1.0 |
1.6 |
Оптимум: максимальная яркость с нормальными цветами |
1.0 / 0.96 / 0.95 |
1.8 |
Заводские настройки (~78% яркости) |
Заводской скрипт снижал яркость двумя способами:
White balance: зелёный и синий каналы занижены до 0.96/0.95 (потеря ~5%)
Гамма-кривая: target_gamma=1.8 при native_gamma=2.9 (менее агрессивная коррекция тёмных тонов)
Оптимальный скрипт
#!/system/bin/sh testgamma --wb_r 1.0 --wb_g 1.0 --wb_b 1.0 --contrast 58 --brightness 50 \ --saturation 80 --hue 35 --target_gamma 1.6 --native_gamma 2.9
Изменения от заводского:
wb_g: 0.96 -> 1.0 (снят фильтр зелёного)wb_b: 0.95 -> 1.0 (снят фильтр синего)target_gamma: 1.8 -> 1.6 (усилена гамма-коррекция — тёмные тона ярче)
Пошаговая инструкция
Для владельцев HY-300 (и, возможно, других проекторов на RK3326):
1. Подключение
# Установить Android Platform Tools # https://developer.android.com/tools/releases/platform-tools adb connect <IP проектора>:5555 adb root
2. Отключение dm-verity (однократно)
adb disable-verity adb reboot # Дождаться полной загрузки adb connect <IP>:5555 adb root
3. Установка максимальной яркости
adb shell mount -o remount,rw /system adb shell "echo '#!/system/bin/sh testgamma --wb_r 1.0 --wb_g 1.0 --wb_b 1.0 --contrast 58 --brightness 50 \ --saturation 80 --hue 35 --target_gamma 1.6 --native_gamma 2.9' \ > /system/bin/testgammatx.sh" adb reboot
4. Откат к заводским настройкам
adb shell mount -o remount,rw /system adb shell "echo '#!/system/bin/sh testgamma --wb_r 1.0 --wb_g 0.96 --wb_b 0.95 --contrast 58 --brightness 30 \ --saturation 80 --hue 35 --target_gamma 1.8 --native_gamma 2.9' \ > /system/bin/testgammatx.sh" adb reboot
Что мы узнали о скрытых возможностях настройки
Исследование вскрыло целый пласт настроек, о которых производитель молчит:
Gamma LUT (testgamma) — полный контроль над гамма-кривой дисплея. Можно настраивать баланс белого по каналам, гамма-коррекцию, и даже создавать произвольные цветовые профили. Утилита поддерживает 9 параметров, из которых 5 реально работают на этом железе.
PQ-система Rockchip — система постобработки изображения с конфигами в JSON. Отдельные профили для UI и видео, поддержка CSC (Color Space Conversion) с настройкой яркости, контраста, насыщенности, тона и гамма-таблиц.
Режимы PQ — свойство persist.vendor.tvinput.rkpq.mode переключает профили в реальном времени (но mode=1 вызывает зелёный экран из-за несовместимого профиля).
DRM/VOP debugfs — полный доступ к состоянию видеопроцессора через /sys/kernel/debug/dri/0/. Можно читать текущую gamma LUT, состояние плейнов, режимы дисплея.
I2C-устройства — на шине I2C-0 обнаружены g-сенсоры (для автоповорота), акселерометр MSA311 и видеомост RK628. Видеомост потенциально может иметь свои настройки яркости/контраста для HDMI-входа.
Два уровня яркости
В итоге мы выяснили, что яркость проектора складывается из двух независимых компонент:
Аппаратная яркость LED — ток через светодиод, управляемый драйвером на плате. Падает на этапе boot-анимации (bootloader или kernel). Из Android софтварно не управляется — ни через PWM (сломан в device tree), ни через GPIO (только вкл/выкл), ни через I2C (LED-драйвер не на шине).
Программная яркость (gamma LUT) — таблица из 256 значений в видеопроцессоре VOP, преобразующая каждый пиксель перед выводом на панель. Полностью контролируемая через testgamma. Именно здесь производитель занизил яркость.
Мы не можем выжать больше фотонов из LED, но можем убрать программное занижение и получить максимум от того, что есть. Разница между заводскими настройками и оптимальными — заметна невооружённым глазом.
Выводы
Бюджетные Android-проекторы могут идти с заниженной программной яркостью — производители перестраховываются с тепловым режимом и ресурсом LED, жертвуя пользовательским опытом.
Отсутствие настроек в интерфейсе не означает отсутствие возможности настройки. Если есть ADB и root — можно добраться до всего.
sed -iна полном разделе — этоrm. Всегда проверяйте свободное место перед in-place редактированием.dm-verity на Android можно обойти через
adb disable-verity+ overlayfs — это даёт полный доступ к /system и /vendor без перепрошивки.Если вы видите
prop id 0в логах DRM — свойство не поддерживается вашим видеопроцессором, и никакие значения параметра не помогут.
Проектор стал заметно ярче. Война за яркость выиграна — по крайней мере, в рамках того, что позволяет софт.
Комментарии (20)

radiolok
22.03.2026 05:26Спасибо за статью! Как раз планировал залезть в свой Lenovo ХЗ. По поводу проблем ADB через USB - существуют специальные кабели USB A-A для отладки, в которых линии питания разорваны. Дабы как раз соединить вместе два хоста.
BTW - не изучали вопрос как заменить бестолковый стартовый экран проектора на что-то более удобное?
eugustus
22.03.2026 05:26На интернете есть полно всяких идей как из старого смартфона сделать видеопроектор

valerka3611 Автор
22.03.2026 05:26Это всё же немного другая история — тут речь не о DIY-проекторе, а о том как выжать максимум из готового устройства, в котором производитель программно обрезал возможности.

vvzvlad
22.03.2026 05:26существуют специальные кабели USB A-A для отладки, в которых линии питания разорваны
Это делается примерно за минуту кухонным ножом из любого кабеля путем разрезания одного провода

valerka3611 Автор
22.03.2026 05:26Спасибо за наводку на кабели с разорванным питанием! Впрочем, тут есть нюанс: USB-A порт на проекторе сконфигурирован как host, и даже без конфликта по питанию ADB через него скорее всего не заработает — нужен device/OTG режим. Так что Wi-Fi ADB остаётся самым надёжным вариантом.
По лаунчеру — можно поставить альтернативный через ADB, например, Projectivy Launcher. Ставится через
adb install, а дефолтный лаунчер отключается черезpm disable-user.
tklim
22.03.2026 05:26То что-то вы натровирили не то )
Нет проблемы при подключении 5в к 5в. Разве что если на одном 4,5в, а на другом 5,5 - то сработает защита (если она есть).
А в общем, эти рокчипы и им подобные часто прошиваются как раз через тот самый USB-A, но это recovery режим, он еще до загрyзки основого бут-лоадера, так что с ним, в лучшем случае, можно слить прошивку и залить обратно.

Gutt
22.03.2026 05:26Бюджетные Android-проекторы могут идти с заниженной программной яркостью — производители перестраховываются с тепловым режимом и ресурсом LED, жертвуя пользовательским опытом.
А testgamma действительно рулит яркостью источника света, или всё-таки "яркостью" картинки, подаваемой на матрицу? Последнее намного вероятнее. Тогда увеличение яркости никак не уменьшит ресурс LED.

valerka3611 Автор
22.03.2026 05:26Testgamma управляет именно gamma LUT в видеопроцессоре (VOP), то есть преобразует пиксели на пути к матрице. LED работает с тем же током независимо от LUT. В статье описал это в разделе «Два уровня яркости» — аппаратная яркость LED в данном случае из Android не управляется вообще (PWM сломан в device tree, GPIO только вкл/выкл).
Так что да: увеличение программной яркости через testgamma не влияет на ресурс LED. Более того, при заниженной программной яркости матрица поглощает больше света и переводит его в тепло, так что заводские настройки даже чуть вреднее для термального режима, чем максимальные.

KizhiFox
22.03.2026 05:26А зачем китаец вообще так сделал, если на тепловыделение этот метод контроля яркости не влияет? Есть у кого-нибудь хоть какие-то идеи?..

ncix
22.03.2026 05:26Гипотеза1: Может он всегда перегревался, и занижение яркости матрицы - неудачные попытки исправить ситуацию от безысходности и непонимания устройства. Возможно, потом перегрев пофиксили аппратно, но в коде всё осталось.
Гипотеза 2 "хуяк-хуяк и в продакшен": просто взяли конфиги какие были и выпустили. На неполную яркость забили или не заметили.
Гипотеза 3: несколько устройств с разной ценой но одинаковой начинкой в линейке, искусственно занижаются параметры не-топовых
eugustus
Может быть детали дешовые подделки и производитель специально снизил яркость чтобы оно хотябы месяц поработало..
Zolg
Яркость в настройках picture processing никак не связана с яркостью лампы, потребляемой мощностью и тепловыделением. Есть даже небольшой обратный эффект: чем светлее картинка, тем меньше света задерживает (и переводит в тепло) матрица
valerka3611 Автор
Всё верно, именно об этом и статья — gamma LUT управляет тем, как матрица пропускает свет от LED, а не самим LED. И да, обратный эффект есть: при заниженной программной яркости матрица блокирует больше света и греется сильнее. Так что заводские настройки — это буквально «и темнее, и горячее».
eugustus
@Zolg
Я с вами не согласен ребята. Ведь матрица, то просто дисплей без задней фольги ( он прозрачный) с высоким разрешением. Чем ярче светит лампа, тем больше света через него пройдет. А слово "BRIGHTNESS" которое появляется в статье можно использовать и как яркость лампочки. Парень там и пишет что яркость была занижена и была на 80%. Ну он там и писал что деллал коректировку ЛУТ. Там же много чего было плохо...
Zolg
Если от лингвистического анализа перейти все же к технической стороне вопроса, то конкретный метод, которым была изменена яркость, он про матрицу, не про лампочку.
Яркость лампочки автор поменять не смог. Да и если смог бы, то при вводных из статьи ее можно было бы только уменьшить.
eugustus
Я уже понял. @valerka3611 обеснил..
valerka3611 Автор
Понимаю логику, но в данном случае всё проще: LED работает на полную мощность всегда — ток через светодиод не меняется. Занижена именно программная яркость через gamma LUT в видеопроцессоре. Это как если бы вам продали монитор на 100% яркости, но с наклеенной тонировочной плёнкой — лампа не страдает, просто часть света отсекается на уровне обработки картинки.
Причём забавно: заниженная программная яркость даже увеличивает нагрев — матрица поглощает и переводит в тепло тот свет, который блокирует. Так что перестраховка с ресурсом LED тут не работает как аргумент.
eugustus
Это дает смысл. Я в проекторах не разбираюсь. Просто интересно было почитать а коментарии оставить..