- PVSM.RU - https://www.pvsm.ru -
Нет, это не ошибка в движке Хабры, и не повтор статьи, опубликованной на прошлой неделе посвященной технологии WiDi [1]. В этот раз мы поговорим о том, как разработчики могут использовать WiDi в своих приложениях. А Вы знали, что для работы с WiDi существует WiDi Extension SDK [2]? Нет? Тогда эта статья для Вас.
Кому из разработчиков это может пригодиться? По идее это может ограничиваться только фантазией разработчика. Идеи лежащие на поверхости — это программы для воспроизведения видео или аудио с визуализацией, программы для просмотра фото. Умная программа может определить наличие WiDi в системе и предложить пользователю отображать воспроизводимый контент на экране телефизора. Возможно, что на данный момент эта тема не слишком актуальна — WiDi адаптеров в настоящий момент не так уж и много.
Но в ближайшем будущем, после того как WiDi адаптеры начнут устанавливать сразу в телевизоры, например компания LG уже продемонстрировала первый телевизор на CES 2012 и собирается начать [3] их выпуск в этом году, данная тема заинтересует многих разработчиков.
Для разработчиков, желающих встроить функционал для работы с WiDi в свои приложения компания Intel выпустила Intel® WiDi Extensions SDK. Данный SDK позволяет:

В SDK Вы найдете документацию, файлы, необходимые для включения в проект и примеры на C++, C#.
Кстати, для разработки приложения, работающего с WiDi не обязательно иметь железо поддерживающее данную технологию. Такое железо понадобится только для тестирования.
Начнем встраивать функционал для работы с WiDi в свою программу.
Для начала необходимо перейти на сайт и скачать Intel® WiDi Extensions SDK [2]. Внутри архива лежит дистрибутив, содержащий сам SDK. Сохраняем, распаковываем, устанавливаем.
Создаем наше тестовое приложение, подключаем к проекту заголовочный файл
#include <IntelWiDiExtensions_i.h>
Первое, что необходимо сделать это создать и инициализировать IWiDiExtensions
HRESULT hr; hr = CoCreateInstance(CLSID_WiDiExtensions, NULL, CLSCTX_INPROC_SERVER, __uuidof(IWiDiExtensions), (LPVOID*)&m_pWiDi); if(hr == S_OK) { hr = m_pWiDi->Initialize((DWORD)m_hWnd); }
Все функции WiDi API являются асинхронными. Для уведомления о результате выполненной операции используются оконные сообщения, посылаемые окну, хэндл которого был передан при вызове функции Initialize.
HRESULT Initialize( HWND windowHandle );
Для того, чтобы получить уведомление об успешном окончании инициализации окно приложение должно уметь обрабатывать сообщение WM_WIDI_INITIALIZED.
Для получения уведомления об ошибке, возникшей в процессе инициализации, используется сообщение WM_WIDI_INITIALIZATION_FAILED. Параметр wParam обработчика сообщения WM_WIDI_INITIALIZATION_FAILED будет содержать соответствующий код ошибки:
RC_WIDI_APP_NOT_FOUND // Не установлено приложение для работы с WiDi RC_WIDI_FAILED_TO_START // Не удалось запустить приложение для работы с WiDi RC_INTERNAL_ERROR // Произошла внутреняя ошибка RC_WIDI_APPLICATION_ERROR // Неизвестная ошибка
После успешной инициализации можно приступать к поиску доступных WiDi адаптеров. Делается это с помощью функции StartScanForAdapters
HRESULT StartScanForAdapters();
Для уведомления о найденом адаптере используется сообщение WM_WIDI_ADAPTER_DISCOVERED. Параметр lParam будет указатель на идентификатор адаптера. Данный идентификатор необходим для подключения к выбранному адаптеру.
После окончания поиска окно получит сообщение WM_WIDI_SCAN_COMPLETE. Параметр wParam будет содержать код, анализ которого поможет определить по какой причине было завершено сканировние:
RC_SUCCESS // Поиск успешно завершен RC_UNABLE_TO_START_SCAN // Поиск не удалось запустить RC_INTERNAL_ERROR // Произошла внутреняя ошибка RC_WIDI_APPLICATION_ERROR // Произошла внутреняя ошибка приложения для работы с WiDi RC_CONNECT_CANCELLED_SCAN // Поиск был прерван
Если было обнаружоне одно и более устройств можно приступать к подключению. Подключение осуществляется вызовом функции StartConnectionToAdapter.
HRESULT StartConnectionToAdapter( BSTR AdapterUniqueID, int SourceScreenResolution, int TargetScreenResolution, ScreenMode Mode );
После успешного подключения окно получит сообщение WM_WIDI_CONNECTED. В случае возникновения проблем — WM_WIDI_DISCONNECT_FAILED, параметр wParam будет содержать код:
RC_CONNECTION_DROPPED // Подключение не было установлено RC_USER_DISCONNECT // Подключение было прервано пользователем
В параметр lParam будет передан идентификатор адаптера.
На этом пока все. Для получения более подробной информации о возможностях WiDi Extensions SDK Вы можете изучить документацию, которая поставляется в комплекте с SDK. Будут вопросы — задавайте здесь, в комментариях, либо на форуме Intel Software Network [4].
Автор:
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/intel/2629
Ссылки в тексте:
[1] посвященной технологии WiDi: http://habrahabr.ru/company/intel/blog/138202/
[2] WiDi Extension SDK: http://downloadcenter.intel.com/Detail_Desc.aspx?lang=rus&changeLang=true&DwnldID=20410
[3] собирается начать: http://www.worldtvpc.com/blog/lg-smart-3dtv-widi-builtin-easy-wireless-streaming/
[4] Intel Software Network: http://software.intel.com/ru-ru/forums/
Нажмите здесь для печати.