Pull to refresh

jointSPACE: управляем телевизором Philips по сети

Programming *
Удивившись практически полному отсутствию информации по данной теме, решил написать этот пост.
В двух словах jointSPACE — это OpenSource платформа, созданная для разработки пользовательских приложений для телевизоров Philips. Она являет собой открытый API для разработки приложений двух типов:

  • Приложения, запускаемые на удаленной системе, рендеринг и управление которыми производится средствами интерфейса телевизора.
  • Приложения для управления телевизором с удаленных систем

Существует SDK под Linux, iOS, MacOS, Android и Windows (как cygwin, так и родной под Visual Studio). Разработчиками и сообществом написано множество примеров для разных платформ. Особенно хочу отметить запуск игры Doom на телевизоре с управлением с пульта.

image

На телевизоре должна быть установлена последняя прошивка и включена функция jointSPACE.
Пока что, поддерживаются ТВ следующих моделей:
— 2k10 (xxPFLxxx5)
— 2k9 (xxPFLxxx4)
(полный список поддерживаемых моделей).
Включается быстрым набором с пульта комбинации «5646877223».

Пример использования


Что касается меня, появление технологии стало отличной новостью — я смог реализовать давнишнюю мечту: переводить телевизор и ПК в режим просмотра кино одним кликом.
Телевизор у меня подключен к компьютеру с Windows 7 посредством HDMI-кабеля, звук выводится по нему же. Чтобы начать просмотр фильма, приходилось: нажимать WinKey+P, выбирать вывод на телевизор, на телевизоре нажимать кнопку выбора источника, стрелками выбирать нужный HDMI-порт, жать OK.

Я решил написать небольшую программку на SDK под cygwin, позволяющую проделывать эти действия в один клик. Так как API не умеет вызывать нужную мне функцию, пришлось эмулировать нажатия клавиш.

#include <jslibrc_client.h>
#include <windows.h>
int $i;
int main (int argc, char *argv[])
{
jslibrc_Init( &argc, &argv );
// Жмем кнопку Source на пульте
jslibrc_KeyDown(keySourceRc6, 0, 56);
jslibrc_KeyUp(keySourceRc6, 0, 56);
//Ждем 2 секунды чтобы телек "подумал"
sleep(2);
 // N раз жмем кнопку "вверх", чтобы поднять курсор гарантированно вверх
for($i=0; $i <= 20; $i++)
{
jslibrc_KeyDown(keySourceRc6, 0, 88);
jslibrc_KeyUp(keySourceRc6, 0, 88);
}
 // Два раза жмем вниз, чтобы выбрать HDMI 2
jslibrc_KeyDown(keySourceRc6, 0, 89);
jslibrc_KeyUp(keySourceRc6, 0, 89);
sleep(1);
jslibrc_KeyDown(keySourceRc6, 0, 89);
jslibrc_KeyUp(keySourceRc6, 0, 89);
sleep(1);
// Жмем ОК
jslibrc_KeyDown(keySourceRc6, 0, 92);
jslibrc_KeyUp(keySourceRc6, 0, 92);
// Меняем дисплей, запуская виндовую программу (которая вызывается по WinKey+P)
//WinExec("c:\\windows\\system32\\displayswitch.exe /internal",SW_SHOW);
jslibrc_Exit();
return 1;
}


Вот так, в несколько строчек, реализовалась моя мечта. Я не считаю себя программистом, поэтому код достаточно крив и не доделан, но суть, думаю, ясна.

Перспективы


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

Для тех, кому интересно:
Сайт проекта (на SourceForge.net)
Наиболее наглядное описание процесса разработки
jointSPACE SDK tutorial for Cygwin (установка и настройка SDK + основы)
jointSPACE API Reference Manual (полное описание API)
Tags:
Hubs:
Total votes 22: ↑21 and ↓1 +20
Views 18K
Comments Comments 18