×
Namespaces

Variants
Actions

Программное управление яркостью экрана

From Nokia Developer Wiki
Jump to: navigation, search
Article Metadata

Статья
Автор: truf (17 Feb 2011)
Последнее редактирование: hamishwillee (07 Mar 2012)
В связи с открытием исходного кода Symbian разработчику предоставилась возможность решить задачи, которые прежде оказались непосильными. Вот и я решил свести счеты с парой фич, реализовать которые в прошлом не удалось.

Начать решил с самой простой – программное изменение яркости экрана. Уж и не помню, когда и зачем мне нужна была эта функциональность. Скорее всего я рассчитывал использовать ее вместо полного программного отключения подсветки экрана. Кроме того, в последних моделях управление подсветкой более не доступно из меню Settings смартфона. Итак, я забрался в исходники Symbian и воспользовался поиском по Master Code Line (MCL). Искать пришлось не долго. Исходя из собственного опыта, я был уверен, что требуемые настройки должны храниться и сообщаться различным компонентам системы или при помощи CRepository или RProperty. Поэтому я довольно быстро обнаружил код, обращающийся к нужным данным в CRepository и потом все необходимые для этого UID’ы в HWRMLightDomainCRKeys.h:

//Light Settings repository UID.
const TUid KCRUidLightSettings = {0?10200C8C};
const TUint32 KLightIntensity = 0?00000001;
 
// Default value for light intensity as percentage. This value is used by HWRM server when calls that affect lights do not include intensity parameter. Possible integer values: 0 – 100 Percentage Default value: 50
const TUint32 KLightSensorSensitivity = 0?00000002;
 
// Default value for light sensor sensitivity. This value is used by HWRM server when calls default intensity is used and sensor is enabled. Possible integer values: 0 – 100 Percentage Default value: 50
const TUint32 KLightSensorInUse = 0?00000003;
// Boolen value is light sensor used or not. Possible integer values:
// 0 – Sensor is not in use
// 1 – Sensor is in use
// Default value: 1
 
const TUint32 KLightTargetMask = 0?00000004; //Contains bitmask of supported targets. @see CHWRMExtendedLight::TLightTarget for target enumeration.
const TUint32 KLightSensorMask = 0?00000005; // Contains bitmask of targets that are under sensor control. @see CHWRMLight::TLightTarget for target enumeration.
const TUint32 KDisplayLightsTimeout = 0?00000006; // Timeout for setting off the display lights. Value is in seconds.

Таким образом, изменение яркости экрана стало элементарным:

const TUid KCRUidLightSettings = {0?10200C8C};
const TUint32 KLightIntensity = 0?00000001;
CRepository* rep = CRepository::NewLC(KCRUidLightSettings);
//Получение текущего значения
 
TInt val;
rep->Get(KLightIntensity, val);
 
//Изменение яркости:
User::LeaveIfError(rep->Set(KLightIntensity, val));
CleanupStack::PopAndDestroy(rep);

Последний штрих – выяснение capabilities, которые должны быть объявлены в mmp файле для доступа к этому репозиторию. Как известно, репозитории не просто создаются динамически, а регистрируются в системе с помощью специальных файлов, описывающих их организацию. Такие файлы носят имена равные UID’у репозитория. Т.е. наш репозитроий регистрируется в системе с помощью 10200C8C.txt, который также легко найти в исходниках. Вот его содержимое:

cenrep
version 1
[owner]
0?101F7A02
[defaultmeta]
0
[platsec]
 
cap_rd=alwayspass cap_wr=WriteDeviceData
[Main]
0?1 int 50 16777216 cap_rd=alwayspass cap_wr=WriteDeviceData
0?2 int 50 16777216 cap_rd=alwayspass cap_wr=WriteDeviceData
0?3 int 1 16777216 cap_rd=alwayspass cap_wr=WriteDeviceData
0?4 int 175 0 cap_rd=alwayspass cap_wr=alwaysfail
0?5 int 175 0 cap_rd=alwayspass cap_wr=alwaysfail
0?6 int 15 16777216 cap_rd=alwayspass cap_wr=WriteDeviceData

Отсюда видно, что для изменения яркости, да и любой другой настройки этого репозитория достаточно объявить WriteDeviceData (чтение не требует capability вообще), что довольно демократично. Использующая данную функцию программа может быть сертифицирована по программе OpenSigned Online Или подписываться DevCert сертификатом.

This page was last modified on 7 March 2012, at 06:15.
97 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×