From 17c3f1753efe9efc128531ed013962bed66506bd Mon Sep 17 00:00:00 2001 From: shawn_he Date: Wed, 19 Jan 2022 10:15:32 +0800 Subject: [PATCH 1/3] update docs Signed-off-by: shawn_he --- .../subsystems/subsys-dfx-hisysevent.md | 286 +----------------- 1 file changed, 5 insertions(+), 281 deletions(-) diff --git a/en/device-dev/subsystems/subsys-dfx-hisysevent.md b/en/device-dev/subsystems/subsys-dfx-hisysevent.md index a50973f8b09..0b138b45a81 100644 --- a/en/device-dev/subsystems/subsys-dfx-hisysevent.md +++ b/en/device-dev/subsystems/subsys-dfx-hisysevent.md @@ -1,285 +1,9 @@ -# Development Guidelines on HiSysEvent +# HiSysEvent -- [Overview](#section77571101789) -- [Available APIs](#section13480315886) -- [How to Develop](#section112771171317) +- **[HiSysEvent Logging] (subsys-dfx-hisysevent-write.md)** -## Overview - -HiSysEvent provides event logging APIs for OpenHarmony to record important information of key processes during system running, helping you locate faults. In addition, you can upload the log data to the cloud for big data analytics. - -## Available APIs - -The following table lists the C++ APIs provided by the **HiSysEvent** class. - -For details about the **HiSysEvent** class, see the API reference. - -**Table 1** C++ APIs provided by HiSysEvent - - - - - - - - - - -

API

-

Description

-

template<typename... Types> static int Write(const std::string &domain, const std::string &eventName, EventType type, Types... keyValues)

-

Logs system events.

-

Input arguments:

-
  • domain: Indicates the domain related to the event. You can use a preconfigured domain or customize a domain as needed. The name of a custom domain can contain a maximum of 16 characters, including digits (0-9) and uppercase letters (A-Z). It must start with a letter.
  • eventName: Indicates the event name. The value contains a maximum of 32 characters, including digits (0 to 9), lowercase letters (a-z), uppercase letters (A-Z), and underscores (_). It must start with a letter and cannot end with an underscore (_).
  • type: Indicates the event type. For details, see EventType.
  • keyValues: Indicates the key-value pairs of event parameters. It can be in the format of the basic data type, std::string, std::vector<basic data type>, or std:vector<std::string>. The value contains a maximum of 48 characters, including digits (0 to 9), lowercase letters (a-z), uppercase letters (A-Z), and underscores (_). It must start with a letter and cannot end with an underscore (_). The number of parameter names cannot exceed 32.
-

Return value: Returns 0 if the operation is successful; returns a value less than 0 otherwise.

-
- -**Table 2** Description of HiSysEvent::Domain APIs - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

API

-

Description

-

static const std::string AAFWK

-

Ability management framework

-

static const std::string APPEXECFWK

-

Application framework

-

static const std::string ACCOUNT

-

Account subsystem

-

static const std::string ACE

-

ACE subsystem

-

static const std::string AI

-

AI subsystem

-

static const std::string BARRIER_FREE

-

Accessibility subsystem

-

static const std::string BIOMETRICS

-

Biometric recognition subsystem

-

static const std::string CCRUNTIME

-

C/C++ operating environment subsystem

-

static const std::string COMMUNICATION

-

Communication subsystem

-

static const std::string DEVELOPTOOLS

-

Development toolchain subsystem

-

static const std::string DISTRIBUTED_DATAMGR

-

Distributed data management subsystem

-

static const std::string DISTRIBUTED_SCHEDULE

-

Distributed scheduler subsystem

-

static const std::string GLOBAL

-

Globalization subsystem

-

static const std::string GRAPHIC

-

Graphics subsystem

-

static const std::string HIVIEWDFX

-

DFX subsystem

-

static const std::string IAWARE

-

Scheduling and resource management subsystem

-

static const std::string INTELLI_ACCESSORIES

-

Smart accessory subsystem

-

static const std::string INTELLI_TV

-

Smart TV subsystem

-

static const std::string IVI_HARDWARE

-

IVI-dedicated hardware subsystem

-

static const std::string LOCATION

-

Location subsystem

-

static const std::string MSDP

-

MSDP subsystem

-

static const std::string MULTI_MEDIA

-

Multimedia subsystem

-

static const std::string MULTI_MODAL_INPUT

-

Multimodal input subsystem

-

static const std::string NOTIFICATION

-

Common event and notification subsystem

-

static const std::string POWERMGR

-

Power management subsystem

-

static const std::string ROUTER

-

Router subsystem

-

static const std::string SECURITY

-

Security subsystem

-

static const std::string SENSORS

-

Pan-sensor subsystem

-

static const std::string SOURCE_CODE_TRANSFORMER

-

Application porting subsystem

-

static const std::string STARTUP

-

Startup subsystem

-

static const std::string TELEPHONY

-

Telephony subsystem

-

static const std::string UPDATE

-

Update subsystem

-

static const std::string USB

-

USB subsystem

-

static const std::string WEARABLE_HARDWARE

-

Wearable-dedicated hardware subsystem

-

static const std::string WEARABLE

-

Wearable-dedicated service subsystem

-

static const std::string OTHERS

-

Others

-
- -**Table 3** Description of HiSysEvent::EventType APIs - - - - - - - - - - - - - - - - - - - -

API

-

Description

-

FAULT

-

Fault event

-

STATISTIC

-

Statistical event

-

SECURITY

-

Security event

-

BEHAVIOR

-

System behavior event

-
- -## How to Develop - -**C++** - -1. Develop the source code. - - Include the **HiSysEvent** header file in the class definition header file or class implementation source file. For example: - - ``` - #include "hisysevent.h" - ``` - - Add the event logging code. For example, if you want to log events specific to the app start time \(start\_app\), then add the following code to the service implementation source file: - - ``` - HiSysEvent::Write(HiSysEvent::Domain::AAFWK, "start_app", HiSysEvent::EventType::FAULT, "app_name", "com.demo"); - ``` - -2. Configure compilation information. Specifically, add the subsystem SDK dependency to **BUILD.gn**. - - ``` - external_deps = [ "hisysevent_native:libhisysevent" ] - ``` +- **[HiSysEvent Listening] (subsys-dfx-hisysevent-read.md)** +- **[HiSysEvent Query] (subsys-dfx-hisysevent-select.md)** +- **[HiSysEvent Tool Usage] (subsys-dfx-hisysevent-tool.md)** -- Gitee From c5eabbb4272a838937f024a9ce1d68ee03ff7650 Mon Sep 17 00:00:00 2001 From: shawn_he Date: Thu, 20 Jan 2022 15:17:48 +0800 Subject: [PATCH 2/3] update docs Signed-off-by: shawn_he --- ...ower-management-subsystem-architecture.png | Bin 61687 -> 28962 bytes en/readme/power-management.md | 66 ++++++++++-------- 2 files changed, 35 insertions(+), 31 deletions(-) diff --git a/en/readme/figures/power-management-subsystem-architecture.png b/en/readme/figures/power-management-subsystem-architecture.png index 698bf197806b9e260b6919e4eaeff2a9900b2d50..da1c6d779d3e7de861385f1f82daa84b79e34f0e 100644 GIT binary patch literal 28962 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 literal 61687 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 diff --git a/en/readme/power-management.md b/en/readme/power-management.md index efbb74157d5..c1d2f1cca25 100644 --- a/en/readme/power-management.md +++ b/en/readme/power-management.md @@ -7,15 +7,19 @@ ## Introduction -The power management subsystem provides the following functionalities: +The power management subsystem provides the following functions: -1. Rebooting the device -2. Managing running locks -3. Querying the power status -4. Obtaining and reporting the charging and battery status -5. Turning on/off the device screen and adjusting the screen brightness +1. System restarting: restarts or shuts down the system. +2. System power management: manages the system power status and running lock. +3. Display-related power consumption adjustment: adjusts the backlight brightness based on the ambient light and turns off the screen based on the proximity light. +4. Power saving: works in low power consumption mode without compromising main functions and performance. +5. Battery management: supports charging and discharging, battery and charging status monitoring (including status updating and reporting), and charging upon power-off. +6. Temperature control: restricts temperature rise through application, SoC, and peripheral control when the device temperature reaches the specified limit. +7. Power consumption statistics: collects statistics on the power consumption of software, hardware, and a single application. +8. Battery service for mini-, small-, and standard-system devices +9. Power management service for mini-, small-, and standard-system devices -**Figure 1** Power management subsystem architecture +**Figure 1** Power management subsystem architecture ![](figures/power-management-subsystem-architecture.png) @@ -24,38 +28,38 @@ The power management subsystem provides the following functionalities: ``` /base/powermgr -├── battery_manager # Battery manager -│ ├── hdi # Hardware Driver Interfaces (HDIs) -│ ├── interfaces # APIs -│ ├── sa_profile # SA profile -│ ├── services # Services -│ └── utils # Utilities -├── display_manager # Display manager -│ ├── interfaces # APIs -│ └── sa_profile # SA profile -│ └── services # Services -│ └── utils # Utilities -├── powermgr_lite # Lite power manager -│ ├── interfaces # APIs -│ └── services # Services -└── power_manager # Power manager - ├── interfaces # APIs - ├── sa_profile # SA profile - └── services # Services - └── utils # Utilities +├── battery_lite # Battery service for mini-, small-, and standard-system devices +├── battery_manager # Battery service +├── battery_statistics # Power consumption statistics service +├── display_manager # Display energy efficiency management service +├── power_manager # System power management service +├── powermgr_lite # Power management service for mini-, small-, and standard-system devices +└── thermal_manager # Temperature control and thermal management service ``` ## Usage -You can use the APIs provided by the power management subsystem to create and release a running lock, obtain battery information, adjust the screen brightness, reboot a device, and power off a device. +As shown in the system architecture, the power management subsystem consists of seven modules. Some modules provide external APIs or public event notifications. You can use them based on your use cases. The functions of key modules are described as follows: + +- Power Manager: provides APIs to request and release the running lock, enable the power saving mode, adjust the brightness, and restart or power off the device. It also provides public events for you to observe changes of the power saving mode and power-off status. +- Battery Manager: provides APIs to query battery information. It also provides public events for you to observer changes of the battery status and charging/discharging status. +- Thermal Manager: provides APIs to query the temperature rise status of a device. It also allows you to register callbacks and public events to listen for the temperature rise status of a device. +- Battery Statistics: provides power consumption statistics on hardware and software. It allows you to query the power consumption of hardware or applications. ## Repositories Involved -**Power Management subsystem** +**Power Management Subsystem** + +[powermgr_power_manager](https://gitee.com/openharmony/powermgr_power_manager) + +[powermgr_display_manager](https://gitee.com/openharmony/powermgr_display_manager) + +[powermgr_battery_manager](https://gitee.com/openharmony/powermgr_battery_manager) -powermgr\_battery\_manager +[powermgr_thermal_manager](https://gitee.com/openharmony/powermgr_thermal_manager) -powermgr\_power\_manager +[powermgr_battery_statistics](https://gitee.com/openharmony/powermgr_battery_statistics) -powermgr\_display\_manager +[powermgr_battery_lite](https://gitee.com/openharmony/powermgr_battery_lite) +[powermgr_powermgr_lite](https://gitee.com/openharmony/powermgr_powermgr_lite) -- Gitee From e8e730bdcb0181bf8ec37d319b9e2de5e92ed482 Mon Sep 17 00:00:00 2001 From: shawn_he Date: Thu, 20 Jan 2022 15:36:22 +0800 Subject: [PATCH 3/3] update docs Signed-off-by: shawn_he --- .../subsystems/subsys-dfx-hisysevent.md | 286 +++++++++++++++++- 1 file changed, 281 insertions(+), 5 deletions(-) diff --git a/en/device-dev/subsystems/subsys-dfx-hisysevent.md b/en/device-dev/subsystems/subsys-dfx-hisysevent.md index 0b138b45a81..a50973f8b09 100644 --- a/en/device-dev/subsystems/subsys-dfx-hisysevent.md +++ b/en/device-dev/subsystems/subsys-dfx-hisysevent.md @@ -1,9 +1,285 @@ -# HiSysEvent +# Development Guidelines on HiSysEvent -- **[HiSysEvent Logging] (subsys-dfx-hisysevent-write.md)** +- [Overview](#section77571101789) +- [Available APIs](#section13480315886) +- [How to Develop](#section112771171317) -- **[HiSysEvent Listening] (subsys-dfx-hisysevent-read.md)** +## Overview + +HiSysEvent provides event logging APIs for OpenHarmony to record important information of key processes during system running, helping you locate faults. In addition, you can upload the log data to the cloud for big data analytics. + +## Available APIs + +The following table lists the C++ APIs provided by the **HiSysEvent** class. + +For details about the **HiSysEvent** class, see the API reference. + +**Table 1** C++ APIs provided by HiSysEvent + + + + + + + + + + +

API

+

Description

+

template<typename... Types> static int Write(const std::string &domain, const std::string &eventName, EventType type, Types... keyValues)

+

Logs system events.

+

Input arguments:

+
  • domain: Indicates the domain related to the event. You can use a preconfigured domain or customize a domain as needed. The name of a custom domain can contain a maximum of 16 characters, including digits (0-9) and uppercase letters (A-Z). It must start with a letter.
  • eventName: Indicates the event name. The value contains a maximum of 32 characters, including digits (0 to 9), lowercase letters (a-z), uppercase letters (A-Z), and underscores (_). It must start with a letter and cannot end with an underscore (_).
  • type: Indicates the event type. For details, see EventType.
  • keyValues: Indicates the key-value pairs of event parameters. It can be in the format of the basic data type, std::string, std::vector<basic data type>, or std:vector<std::string>. The value contains a maximum of 48 characters, including digits (0 to 9), lowercase letters (a-z), uppercase letters (A-Z), and underscores (_). It must start with a letter and cannot end with an underscore (_). The number of parameter names cannot exceed 32.
+

Return value: Returns 0 if the operation is successful; returns a value less than 0 otherwise.

+
+ +**Table 2** Description of HiSysEvent::Domain APIs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

API

+

Description

+

static const std::string AAFWK

+

Ability management framework

+

static const std::string APPEXECFWK

+

Application framework

+

static const std::string ACCOUNT

+

Account subsystem

+

static const std::string ACE

+

ACE subsystem

+

static const std::string AI

+

AI subsystem

+

static const std::string BARRIER_FREE

+

Accessibility subsystem

+

static const std::string BIOMETRICS

+

Biometric recognition subsystem

+

static const std::string CCRUNTIME

+

C/C++ operating environment subsystem

+

static const std::string COMMUNICATION

+

Communication subsystem

+

static const std::string DEVELOPTOOLS

+

Development toolchain subsystem

+

static const std::string DISTRIBUTED_DATAMGR

+

Distributed data management subsystem

+

static const std::string DISTRIBUTED_SCHEDULE

+

Distributed scheduler subsystem

+

static const std::string GLOBAL

+

Globalization subsystem

+

static const std::string GRAPHIC

+

Graphics subsystem

+

static const std::string HIVIEWDFX

+

DFX subsystem

+

static const std::string IAWARE

+

Scheduling and resource management subsystem

+

static const std::string INTELLI_ACCESSORIES

+

Smart accessory subsystem

+

static const std::string INTELLI_TV

+

Smart TV subsystem

+

static const std::string IVI_HARDWARE

+

IVI-dedicated hardware subsystem

+

static const std::string LOCATION

+

Location subsystem

+

static const std::string MSDP

+

MSDP subsystem

+

static const std::string MULTI_MEDIA

+

Multimedia subsystem

+

static const std::string MULTI_MODAL_INPUT

+

Multimodal input subsystem

+

static const std::string NOTIFICATION

+

Common event and notification subsystem

+

static const std::string POWERMGR

+

Power management subsystem

+

static const std::string ROUTER

+

Router subsystem

+

static const std::string SECURITY

+

Security subsystem

+

static const std::string SENSORS

+

Pan-sensor subsystem

+

static const std::string SOURCE_CODE_TRANSFORMER

+

Application porting subsystem

+

static const std::string STARTUP

+

Startup subsystem

+

static const std::string TELEPHONY

+

Telephony subsystem

+

static const std::string UPDATE

+

Update subsystem

+

static const std::string USB

+

USB subsystem

+

static const std::string WEARABLE_HARDWARE

+

Wearable-dedicated hardware subsystem

+

static const std::string WEARABLE

+

Wearable-dedicated service subsystem

+

static const std::string OTHERS

+

Others

+
+ +**Table 3** Description of HiSysEvent::EventType APIs + + + + + + + + + + + + + + + + + + + +

API

+

Description

+

FAULT

+

Fault event

+

STATISTIC

+

Statistical event

+

SECURITY

+

Security event

+

BEHAVIOR

+

System behavior event

+
+ +## How to Develop + +**C++** + +1. Develop the source code. + + Include the **HiSysEvent** header file in the class definition header file or class implementation source file. For example: + + ``` + #include "hisysevent.h" + ``` + + Add the event logging code. For example, if you want to log events specific to the app start time \(start\_app\), then add the following code to the service implementation source file: + + ``` + HiSysEvent::Write(HiSysEvent::Domain::AAFWK, "start_app", HiSysEvent::EventType::FAULT, "app_name", "com.demo"); + ``` + +2. Configure compilation information. Specifically, add the subsystem SDK dependency to **BUILD.gn**. + + ``` + external_deps = [ "hisysevent_native:libhisysevent" ] + ``` -- **[HiSysEvent Query] (subsys-dfx-hisysevent-select.md)** -- **[HiSysEvent Tool Usage] (subsys-dfx-hisysevent-tool.md)** -- Gitee