company_banner

Intel Wireless Display: для разработчика

    Нет, это не ошибка в движке Хабры, и не повтор статьи, опубликованной на прошлой неделе и посвященной технологии WiDi. В этот раз мы поговорим о том, как разработчики могут использовать WiDi в своих приложениях. А Вы знали, что для работы с WiDi существует WiDi Extension SDK? Нет? Тогда эта статья для Вас.

    Кому из разработчиков это может пригодиться? По идее это может ограничиваться только фантазией разработчика. Идеи лежащие на поверхности — это программы для воспроизведения видео или аудио с визуализацией, программы для просмотра фото. Умная программа может определить наличие WiDi в системе и предложить пользователю отображать воспроизводимый контент на экране телевизора. Возможно, что на данный момент эта тема не слишком актуальна — WiDi адаптеров в настоящий момент не так уж и много.

    Но в ближайшем будущем, после того как WiDi адаптеры начнут устанавливать сразу в телевизоры, например компания LG уже продемонстрировала первый телевизор на CES 2012 и собирается начать их выпуск в этом году, данная тема заинтересует многих разработчиков.

    Для разработчиков, желающих встроить функционал для работы с WiDi в свои приложения, компания Intel выпустила Intel WiDi Extensions SDK. Данный SDK позволяет:

    • Определять наличие и работоспособность WiDi
    • Поиск и определение адаптеров готовых к подключению
    • Подключение к адаптеру
    • Изменение параметров экрана, режима отображения (клонировать экран, расширить рабочий стол на второй экран)




    В SDK Вы найдете документацию, файлы, необходимые для включения в проект и примеры на C++, C#.

    Кстати, для разработки приложения, работающего с WiDi, не обязательно иметь железо, поддерживающее данную технологию. Такое железо понадобится только для тестирования.

    Начнем встраивать функционал для работы с WiDi в свою программу.

    Для начала необходимо перейти на сайт и скачать Intel WiDi Extensions SDK. Внутри архива лежит дистрибутив, содержащий сам 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.
    • +11
    • 6.5k
    • 1
    Intel
    180.37
    Company
    Share post

    Comments 1

      0
      Телефизор — это отличное слово, мне понравилось. А еще больше понравилось, что SDK бесплатный. У тебя про это нигде не сказано — пусть будет приятным сюрпризом разработчикам :)

      Only users with full accounts can post comments. Log in, please.