• интерфейс администратора;
• автоматически выполняемые процедуры;
• функции темизации;
• интерфейс пользователя.
В интерфейсе администратора с помощью hook_menu и Forms API будет создана форма, позволяющая администратору указать список валют, которые необходимо выводить в блоке, адрес XML-документа, из которого будет «подтягиваться» информация об обновленных курсах валют, и частоту обновления данных. Кроме того, с помощью hook_perm будет создано «право доступа», дающее возможность администратору сайта ограничить доступ к настройкам модуля.
Регулярно выполняемая процедура в модуле будет одна: при запуске строки cron-таблицы необходимо проверить, когда произошло последнее обновление данных о курсах валют. Если между текущим моментом и последним обновлением данных прошло время большее, чем указано в соответствующей настройке интерфейса управления модулем, то необходимо соединиться с сервером ЦБ, получить обновленные данные и сохранить их в базе.
Интерфейс пользователя создадим при помощи хука hook_block, позволяющего формировать блоки с данными. Чтобы верстальщик мог изменять внешний вид выводимых модулем данных, создадим свою функцию темизации, которую необходимо зарегистрировать в системе при помощи hook_theme.
Теперь приступим к реализации каждого из описанных этапов. Для начала добавим в наш файл currencies.module функцию:
function currencies_perm() {
return array('access currencies block settings');
}
Эта функция – реализация хука hook_perm, который, как сказано выше, определяет дополнительные права доступа. Hook_perm – один из самых простых хуков, он всего лишь возвращает массив строк, представляющих собой права доступа. После инсталляции модуля администратор сайта на странице Admin – Permissions (admin/user/permissions) может указать, какие группы пользователей имеют право доступа access currencies block settings, а мы в дальнейшем, во время реализации формы настроек модуля при помощи функции user_access, будем проверять, имеет ли текущий пользователь право доступа access currencies block settings или нет.
Важный момент. Пользователь с uid=1, т. е. первый созданный в системе, является суперпользователем, для него функция user_access всегда возвращает значение TRUE, а это значит, что он всегда имеет доступ ко всем функциям сайта. Это одна из причин, почему не рекомендуется работать в системе с учетной записью суперпользователя: зачастую разработчики забывают раздавать пользователям необходимые права доступа, так как сами, работая как суперпользователи, не имеют проблем с доступом к ресурсам сайта.
Для определения дополнительного системного пути, по которому в нашем примере будет доступна страница управления модулем, необходимо создать реализацию хука hook_menu:
function currencies_menu() {
$items = array();
$items['admin/settings/cur-block'] = array(
'title' => t('Currencies block settings'),
'description' => 'Currencies block settings.',
'page callback' => 'drupal_get_form',
'page arguments' => array('currencies_settings'),
'access arguments' => array('access cur block settings'),
);
return $items;
}
Эта функция также возвращает ассоциативный массив. Ключом каждого элемента массива должен быть путь, регистрируемый в системе (в нашем случае это admin/settings/cur-block), а значением – вложенный массив, содержащий информацию о создаваемом пункте меню. Давайте разберем каждый из параметров отдельно.
Title – заголовок меню – будет использоваться при переходе на страницу с адресом admin/settings/cur-block в строке заголовка браузера (тег <title>) и в качестве заголовка страницы (тег <h1>), а также в качестве текста ссылки, ведущей на созданную страницу настроек.
Description – описание пункта меню, которое в нашем случае будет использоваться на странице администрирования.
Page callback – функция, которая будет генерировать страницу, создаваемую по указанному пути. В простом случае значением этого параметра должна быть функция, возвращающая HTML-код, который будет показан пользователю. Однако мы по указанному адресу создаем не обычную страницу, а форму, значения которой автоматически сохраняются в БД. Поэтому для параметра page callback мы назначаем вызов системной функции drupal_get_form(), которая выведет на экран форму, созданную функцией с именем, указанным в элементе массива page arguments; в нашем случае это функция currencies_settings(). Функция currencies_settings() должна вернуть ассоциативный массив, содержащий информацию об элементах создаваемой формы. Подробнее об этом массиве будет рассказано ниже.
Access arguments – массив «прав доступа». Пользователи, обладающие правами доступа, перечисленными в этом массиве, могут получить доступ к создаваемому пункту меню.
Тема оформления в Drupal – это набор особым образом сформированных HTML-шаблонов и CSS-файлов, на основе которых ядро Drupal генерирует запрашиваемую пользователем страницу. Если в системе используется встроенный в Drupal шаблонный «движок» PHPTemplate, то каждая тема оформления может содержать служебный файл template.php, в котором могут размещаться функции, переопределяющие стандартный вывод модулей. У каждой темы оформления, как и у каждого модуля, должно быть свое уникальное имя и файл настроек .info.
Более подробную информацию о параметрах пунктов меню можно найти в документации.
Сейчас в нашем модуле определен новый пункт меню, но не определена функция, формирующая содержимое страницы, на которую этот пункт указывает (см. листинг 2).
function currencies_settings() {
$form['currencies_list'] = array(
'#type' => 'textfield',
'#title' => t('Currencies'),
'#default_value' => variable_get('currencies_list',
"USD,EUR,CNY,BYR,KZT,TRY,UAH,JPY"),
'#maxlength' => 255,
);
$form['currencies_list_freq'] = array(
'#type' => 'textfield',
'#title' => t('Frequency of updating of the data
(in seconds)'),
'#default_value' => variable_get('currencies_list_freq',
3600),
'#maxlength' => 255,
'#description' => t('It is recommended to use value
not less than 3600.'),
);
$form['currencies_list_url'] = array(
'#type' => 'textfield',
'#title' => t('Адрес xml-файла'),
'#default_value' => variable_get('currencies_list_url',
"http://www.cbr.ru/scripts/XML_daily.asp?date_req=
%d/%m/%y"),
'#maxlength' => 255,
'#description' => t('The XML-file address.'),
);
return system_settings_form($form);
}
Как и хуки hook_menu, hook_schema и многие другие хуки Drupal, эта функция должна возвращать ассоциативный массив, на этот раз содержащий информацию о параметрах создаваемой формы. Здесь мы создаем три однострочных текстовых поля (параметр #type имеет значение textfield), значения по умолчанию для которых (параметр #default_value) будут храниться и выбираться из стандартной таблицы variables Drupal при помощи функций variable_set() и variable_get(). Благодаря использованию функций drupal_get_form и system_settings_form нет необходимости заботиться о создании кнопок Submit и Reset, а также о функциях, обрабатывающих и сохраняющих данные формы. В более сложных случаях, которые будут рассмотрены в следующей статье, придется вручную создавать функции проверки введенных пользователем значений и сохранения данных.
Подробное описание типов полей, используемых в формах, можно найти в документации.
Все, мы завершили разработку первой из трех частей нашего модуля – административного интерфейса и переходим к разработке второй его части – инструмента получения данных от удаленного сервера.
Чтобы Drupal периодически выполнял определенные действия, в планировщике задач операционной системы необходимо настроить запуск файла cron.php, который находится в корне каждого Drupal-сайта. При выполнении этого файла будет вызываться хук hook_cron, и в нашем модуле мы напишем его реализацию:
function currencies_cron() {
currencies_contents();
}
Процедура получения и обработки XML-файла, расположенного на удаленном сервере, довольно обычна, поэтому она здесь не приведена. При желании вы можете самостоятельно разобрать логику работы этой функции, изучив исходные коды модуля Currencies, которые есть на диске, прилагаемом к журналу. В результате ее работы формируется массив $result, в котором содержится информация о курсах валют и который передается функции темизации. Функцию currencies_contents() см. в листинге 3. Здесь мы сначала проверяем, нет ли запрашиваемых данных в кэше Drupal, если нет, то происходит соединение с удаленным сервером (его адрес указан через административный интерфейс модуля), получение и обработка XML-файла и формирование массива данных, который передает функции темизации. Функция темизации формирует выходной HTML-код, записываемый в кэш, его время жизни явно указывается исходя из соответствующей настройки, заданной в интерфейсе управления модулем. Drupal автоматически управляет закэшированными данными и при необходимости удаляет устаревшие записи.
function currencies_contents() {
if(!$c = cache_get('currencies')) {
/* здесь пропущен код, отвечающий за получение
и обработку XML-файла */
$output = theme('currencies_block', $result);
$t = variable_get('currencies_list_freq', 3600);
if(!$t || !is_numeric($t)) $t = 3600;
cache_set("currencies", $output, 'cache', time() + $t);
} else {
$output = $c->data;
}
return $output;
}
Функция currencies_contents() будет использоваться не только при запуске cron-задания, но и при формировании блока с данными, который будет показываться пользователю. Таким образом, практически всегда пользователи будут видеть данные, полученные из кэша Drupal, если же на сайте не работает cron и нет закэшированных данных о курсах валют, то произойдет соединение с сервером ЦБ, формирование и запись в кэш необходимых данных.
Теперь подробнее остановимся на функциях темизации (theming; термин не слишком благозвучен, но уже стал общепринятым). Теоретически прямо в коде функции currencies_contents() можно было бы сформировать HTML-код, который в дальнейшем и видел бы посетитель сайта в браузере. Однако такой подход неверен, поскольку при изменении оформления данных пришлось бы менять код модуля, а это влечет за собой две проблемы. Во-первых, модуль могут использовать сторонние разработчики, и им для внесения изменений придется вникнуть в структуру модуля и внести в него изменения, которые могут привести к ошибкам. Во-вторых, часто при разработке крупных проектов версткой и программированием занимаются разные люди. Верстальщик может не иметь представления о том, как работать с языком PHP в целом и модулями Drupal в частности. По этому правильнее вынести все действия, связанные с оформлением данных, в отдельные файлы и функции, для чего и нужны функции темизации.
Функции темизации – это функции, генерирующие HTML-код, который впоследствии показывается пользователю.
Функции темизации – это функции, генерирующие HTML-код, который впоследствии показывается пользователю. Особенность таких функций в том, что, во-первых, они не должны реализовывать никакой бизнес-логики, т. е. в их задачи входит только генерирование HTML-кода на основе полученных аргументов. Во-вторых, эти функции могут быть переопределены разработчиком сайта без редактирования кода модуля, путем изменения файла template.php или создания файла-шаблона.
В нашем случае массив данных формируется функцией currencies_contents(), а HTML-код создается функцией theme_currencies_block(), которую нам сейчас предстоит определить и зарегистрировать. Подчеркну, что вызов любой функции темизации осуществляется через вызов функции-обертки с именем theme(), т. е. функция theme_currencies_block($argument) должна вызываться как theme('currencies_block', $argument). Чем вызвана эта необходимость, я объясню чуть позже.
Для регистрации функций темизации, используемых в модуле, мы должны реализовать hook_theme, который возвращает массив имен применяемых функций темизации и принимаемых ими параметров. В нашем модуле будет использоваться одна функция темизации theme_currencies_block(), которая на вход принимает один обязательный аргумент – массив курсов валют, поэтому реализация хука hook_theme будет выглядеть так:
function currencies_theme() {
return array(
'currencies_block' => array(
'arguments' => array('result' => NULL),
),
);
}
Без такой регистрации вызов theme('currencies_block', $argument) будет невозможен. Сама функция темизации будет такой:
function theme_currencies_block($result) {
$output = "<ul>";
foreach($result as $k => $v) {
if($v["diff"] > 0) {
$color = "#5aaf43";
$v["diff"] = "+" . $v["diff"];
}
else if($v["diff"] < 0) $color = "#f00";
else if($v["diff"] == 0) $color = "#00f";
$output .= "<li>" . $v["nominal"] . " " . $v["name"] . " = "
. $v["value"] . " (<span style=\"color: " . $color . "\">"
. $v["diff"] . "</span>)</li>";
}
$output .= "</ul>";
return $output;
}
Еще раз обратите внимание на то, что в функции currencies_theme в качестве имени функции темизации указывается название currencies_block, а реализация ее имеет имя theme_currencies_block(). Нужно это, чтобы в дальнейшем разработчики сайтов, использующие наш модуль, могли переопределить эту функцию, т. е. изменить формируемый ею HTML-код. Для этого им в папке со своей темой в файле template.php достаточно будет создать функцию с именем, совпадающим с именем функции темизации, но в котором слово theme заменено на название используемой темы оформления, т. е. создать функцию название_темы_оформления_currencies_block(). Ядро Drupal, когда встретит в коде модуля вызов вида theme('currencies_block', $result), сначала попробует найти функцию темизации в файле template.php используемой в данный момент темы оформления, и только если там ее не найдет, использует функцию theme_currencies_block().
Ядро Drupal пытается найти функцию темизации в файле template.php используемой в данный момент темы оформления.
В случае больших шаблонов удобнее вынести функцию темизации из файла template.php в отдельный файл. Для этого в массиве, возвращаемом реализацией хука hook_theme, нужно добавить элемент с ключом template и именем, соответствующим имени файла-шаблона, а в каталоге с модулем разместить файл-шаблон с указанным ранее именем и расширением .tpl.php. В итоге hook_theme() примет вид:
function currencies_theme() {
return array(
'currencies_block' => array(
'arguments' => array('result' => NULL),
'template' => 'cur-block',
),
);
}
а в папке с модулем нужно разместить файл с именем cur-block.tpl.php и таким содержимым:
<ul>
<?php
foreach($result as $k => $v) {
if($v["diff"] > 0) {
$color = "#5aaf43";
$v["diff"] = "+" . $v["diff"];
}
else if($v["diff"] < 0) $color = "#f00";
else $color = "#00f";
print "<li>" . $v["nominal"] . " " . $v["name"] . " = " .
$v["value"] . " (<span style=\"color: " . $color . "\">" .
$v["diff"] . "</span>)</li>";
}
?>
</ul>
Теперь, чтобы переопределить вывод данных, формируемых модулем Currencies, разработчику достаточно скопировать файл cur-block.tpl.php из папки с модулем в папку с используемой темой оформления и внести в него необходимые изменения.
Сейчас наш модуль имеет интерфейс администратора, умеет автоматически соединяться с удаленным сервером, получать необходимую информацию, формировать из нее HTML-код и сохранять его в кэше. Осталась самая простая для программиста и наиболее значимая для посетителя сайта часть – вывод данных на экран.
Для решения этой задачи мы могли бы через созданную ранее функцию currencies_menu() зарегистрировать еще один путь и в качестве параметра page callback указать функцию currencies_contents(), которая получила бы необходимые данные (из кэша или от удаленного сервера) и вывела бы их на экран через функцию темизации. Но мы хотим, чтобы курсы валют выводились не отдельной страницей, а в блоке (оформленный особым образом элемент, содержащий данные) на любой заданной администратором сайта странице. Для этого необходимо создать реализацию хука hook_block() (см. листинг 4).
function currencies_block($op = 'list', $delta = 0,
$edit = array()) {
switch ($op) {
case 'list':
$blocks[0] = array(
'info' => t('Currencies block'),
);
return $blocks;
case 'view':
switch ($delta) {
case 0:
$block['subject'] = t('Currencies block');
$block['content'] = currencies_contents();
break;
}
return $block;
}
}
Параметр $op (сокращение от operation), содержит информацию о том, какая операция над блоком в данный момент выполняется. Значение list сообщает модулю, что информация о нем выводится в списке модулей, здесь мы должны передать ядру Drupal один обязательный параметр – заголовок модуля и ряд необязательных параметров, информацию о которых можно найти в документации.
Значение view аргумента $op означает, что пользователь просматривает страницу, на которой должен быть отображен наш блок, и модуль обязан вернуть его содержимое. Для этого функция должна сформировать и выдать ассоциативный массив, элемент с ключом content которого будет использован в качестве содержимого блока, а необязательный элемент с ключом subject – заголовка.
Каждый модуль может создавать несколько блоков, параметр $delta хука hook_block содержит индекс обрабатываемого в текущий момент блока.
Все, разработка модуля завершена! Теперь администратор сайта, после инсталляции модуля Currencies, может активировать созданный им блок, для этого необходимо перейти в меню Administer – Blocks (admin/build/block), перетащить мышкой строку с описанием блока в нужный регион (область страницы, которая может содержать один или несколько блоков) и сохранить изменения. В свойствах модуля доступны стандартные для Drupal средства управления блоком: список страниц, на которых блок должен показываться (или наоборот список страниц, на которых блок не должен показываться), список ролей пользователей, которые имеют доступ к содержимому блока, и другие.
• Руководство по разработке модулей: http://drupal.org/node/206754.
• Параметры, используемые в .info-файлах: http://drupal.org/node/231036.
• Введение в Schema API: http://drupal.org/node/146843.
• Типы полей, используемых в Schema API: http://drupal.org/node/159605.
• Описание hook_menu(): http://api.drupal.org/api/function/hook_menu/6.
• Описание типов полей Forms API: http://api.drupal.org/api/file/developer/topics/forms_api_reference.html/6.
• Описание hook_block(): http://api.drupal.org/api/function/hook_block/6.
Принтеры
Компания Konica Minolta (www.konicaminolta.ru) объявила о выпуске универсального драйвера. (UPD, Universal Print Driver) для всех устройств печати Konica Minolta и других производителей, совместимых с PCL6 или PostScript. Пакет будет полезен компаниям с большим парком разнообразного оборудования; система автоматически распознает доступные сетевые устройства печати и отображает их в виде списка, из которого пользователь выбирает подходящие. С помощью драйвера администраторы могут дистанционно настраивать многофункциональные аппараты и принтеры.
Универсальный драйвер печати имеет унифицированный графический интерфейс, предоставляет доступ ко всем возможностям устройства, от выбора формата до финишной обработки и настройки качества печати. Кроме того, все основные настройки, например формат бумаги и тип печати, могут быть одинаково применены на всех устройствах без установки дополнительных драйверов.
Предусматривается фильтр поиска, позволяющий искать печатное устройство по заданным параметрам. При необходимости печатать высококачественные цветные отпечатки формата А3 в дуплексном режиме пользователь просто выбирает соответствующие характеристики, такие как цвет, поддержка формата А3 и двусторонняя печать в поисковом окне. В окне фильтра появится список печатных устройств, отвечающих задаче.
Программы
Компания Entensys (www.usergate.ru) объявила о выпуске UserGate Proxy & Firewall 5.2. Система предназначается для организации доступа в Интернет и защиты локальной сети от внешних угроз, одно из главных нововведений – обновленный механизм блокирования HTTP-трафика по заголовку Content-Type, что позволяет блокировать определенные типы данных (картинки, видеоданные, флэш-контент и др.). Изменения в области информационной безопасности коснулись соединения между консолью и сервером – в новой версии используется SSL-защита всех передаваемых данных между этими модулями. Реализован мастер настройки, при помощи пошаговых инструкций эта функция позволяет быстро настроить сервер. Изменился и раздел статистики, появились новые отчеты («пользователь – сайты» и «группа пользователей – сайты»). Отметим также усовершенствованный механизм конвертации конфигурационного файла из форматов предыдущих версий UserGate, автоматическое восстановление базы данных в случае повреждения и оптимизацию работы модуля кэширования. Зарегистрированные пользователи версии 5.х могут получить обновление бесплатно.
Программы
Выпущена новая версия пакета Hidden Administrator (www.hidadmin.ru). Программа предназначена для удаленного управления компьютерами по сети и через Интернет. Среди ее возможностей – полный доступ к ресурсам удаленного компьютера, скрытое наблюдение за ними, управление, одновременное наблюдение за множеством компьютеров (до 256), запись изображения с удаленного экрана в видеофайл формата AVI и др.
Операционные системы
Windows 7: новые средства управления энергопотреблением
Джереми А. Каплан
С недавних пор ключевым рекламным обещанием Microsoft стало проектирование продуктов, оказывающих минимальное или нулевое влияние на окружающую среду. Новые акценты очевидны при внимательном знакомстве с бета-версиями и версиями-кандидатами (release candidate, RC) готовящейся к выпуску ОС Windows 7. Во многом изменены способы взаимодействия между аппаратными компонентами и ПК в целом; кроме того, появились принципиальные изменения в работе всей операционной системы. Благодаря этим усовершенствованиям Windows 7 становится более «расторопной», сокращается время загрузки и заметно увеличивается время работы от батарей.
«В мире насчитывается более миллиарда ПК, и любые изменения в операционной системе могут иметь огромные последствия в масштабах земного шара», – говорит Франсуа Эйдженстат, руководитель подразделения Microsoft по охране окружающей среды. Руководство компании понимает, что проблемы непроизводительных затрат энергии и экологических загрязнений действительно волнуют потребителей, и Microsoft готова принять участие в их решении. Эйдженстат отметил, что работа по повышению эффективности операционной системы началась с Vista. «Мы дополнили Vista тридцатью новыми функциями энергосбережения, – указывает он. – А самое важное состоит в том, что средства управления энергопотреблением интегрированы в ОС по умолчанию, что оказывает огромное влияние на объем потребляемой энергии».
В Windows 7 будут добавлены новые и улучшены имеющиеся функции управления питанием.
Безусловно, это шаг в верном направлении. Но борьба с потерями энергии не ограничивается лишь переводом ПК в спящий режим, точно так же, как урезание расходов – не единственный способ экономии денег. В Windows 7 будут добавлены новые или улучшены уже имеющиеся функции как для конечных пользователей, так и для ИТ-специалистов. Эти изменения проектировались во взаимодействии с партнерами – разработчиками аппаратных и программных средств. Джейсон Лезнек, менеджер группы продуктов Windows 7, утверждает, что специалисты Microsoft потратили немало времени, «изучая экосистему, чтобы лучше понять причины проблем энергосбережения. Кроме того, мы располагаем более полными телеметрическими данными, позволяющими выяснить, почему компьютеры не переходят в спящий режим».
Настройки дисплея
Некоторые новшества сразу бросаются в глаза, в частности новые дисплеи с «адаптивной яркостью». В Windows Vista есть возможность отключить дисплей, если ПК бездействует в течение определенного времени, например 10 или 15 мин. В Windows 7 яркость дисплея по умолчанию снижается после гораздо более короткого периода – 2 мин при работе от батарей и 5 мин при работе от сети переменного тока. Благодаря этому увеличивается время работы от батарей и сокращаются затраты энергии. Операционная система также взаимодействует с аппаратными датчиками окружающего освещения; если они есть в компьютере, Windows автоматически регулирует яркость в соответствии с общим уровнем освещенности даже во время работы пользователя.
Настройки сетевого оборудования
Заметные изменения коснулись оборудования определенных типов, в частности Ethernet– и беспроводных сетевых соединений. В их основу, возможно, положена будущая спецификация IEEE 802.3az, более известная как «зеленый Ethernet». Отличительные особенности этой технологии – механизм снижения потребления энергии в периоды малой загруженности линии связи и протокол для координации переключений между уровнями потребления энергии. Иными словами, если не подключить кабель Ethernet к порту на маршрутизаторе, маршрутизатор может перевести порт в спящий режим. Это, безусловно, удачное решение. Комитет IEEE планирует представить окончательный вариант спецификации лишь к сентябрю 2010 г., но данное обстоятельство не помешало независимым поставщикам оборудования выпустить в продажу продукты с использованием некоторых из этих новшеств: D-Link была первой в феврале 2008 г., ее примеру быстро последовали Linksys, Netgear, TrendNet и другие компании. Однако эти изготовители выпускают автономные сетевые устройства. А как насчет большого блока, который стоит под рабочим столом практически у каждого из нас?
Microsoft не довольствуется позицией праздного наблюдателя; с выходом Windows 7 компания планирует дополнить ПК сетевыми функциями энергосбережения. Согласно документу Windows 7 Power Management, «когда пользователи отключают сетевой кабель, Windows 7 может автоматически перевести сетевой адаптер в состояние с малым потреблением энергии, известное как D3 (при этом необходимы совместимые адаптер и драйвер). Таким образом дополнительно экономится до 0,5 Вт электроэнергии. Результаты будут различными в зависимости от аппаратной конфигурации и сетевого контроллера. Когда пользователь вновь подключает сетевой кабель, Windows 7 автоматически переводит сетевой адаптер в состояние с полным потреблением энергии, известное как D0.» Это описание напоминает спецификацию IEEE 802.3az.
Вышесказанное касается, конечно, только Ethernet, но Microsoft вносит очень нужные улучшения и в режимы беспроводной связи с малым потреблением энергии. В документе говорится, что такие решения применялись в Vista, но при этом отмечается, что «во многих беспроводных узлах доступа режим с пониженным потреблением энергии реализован неверно. В Windows 7 набор сетевых драйверов направляет запрос к узлу доступа о функциях энергосбережения и переключается в энергосберегающий режим только при наличии совместимого узла доступа. В результате можно настроить политики энергосбережения по умолчанию без ущерба для качества связи при подключении компьютера к узлам доступа, которые не совместимы с режимами малого потребления энергии».
В соединения Bluetooth также внесены изменения с целью повышения эффективности. Windows 7 обеспечит состояние селективной приостановки, если обнаружено переключение устройства Bluetooth в режим с малым потреблением энергии. Устройства всегда могли переключаться в состояния с пониженным расходом энергии, так как радиопередатчики Bluetooth отличаются высоким потреблением энергии, снижая продолжительность работы портативных гаджетов от батарей. Однако на настольные ПК и даже ноутбуки не распространяются столь строгие ограничения по энергопотреблению, как на мобильные телефоны и камеры, поэтому функции экономии электроэнергии для них даже не рассматривались. В Windows 7, если устройство входит в режим энергосбережения (sniff), операционная система переводит ПК в режим селективной приостановки, что позволяет экономить энергию на обеих сторонах соединения.
У Bluetooth SIG есть собственные планы. Недавно объявлено о разработке версии спецификации Bluetooth с низким потреблением энергии. Цель изменений – повысить скорость передачи данных с использованием возможностей соединений 802.11, заимствуя часть полосы пропускания канала связи для пересылки больших файлов. Но это в большей степени повлияет на работу вашего сотового телефона, чем настольного ПК.
Пользователи Windows 7 могут обнаружить дополнение к знакомому устройству – звуковой микросхеме. В операционной системе следующего поколения будет реализована новейшая спецификация Intel HD Audio с низким энергопотреблением. Для драйвера вводится четвертое энергетическое состояние – D3cold, определяемое как состояние с нулевой реакцией и самым низким уровнем энергии, в которое может перейти кодек, не теряя способности к «пробуждению».
В упомянутом выше документе отмечается: «В драйвере класса Windows 7 HD Audio это состояние используется для углубленной консервации энергии, когда звуковое устройство не используется. В Windows 7 также реализована селективная приостановка аудиокласса USB, благодаря которой упрощается интеграция платформы для решений с микрофоном Adaptive Array и Web-камерами USB. Благодаря селективной приостановке в устройствах аудиокласса возможны решения на основе USB без значительного уменьшения времени работы от батарей».
В операционной системе Windows 7 будет реализована новейшая спецификация Intel HD Audio с низким энергопотреблением.