17777dab0Sopenharmony_ci/*
27777dab0Sopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd.
37777dab0Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
47777dab0Sopenharmony_ci * you may not use this file except in compliance with the License.
57777dab0Sopenharmony_ci * You may obtain a copy of the License at
67777dab0Sopenharmony_ci *
77777dab0Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
87777dab0Sopenharmony_ci *
97777dab0Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
107777dab0Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
117777dab0Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
127777dab0Sopenharmony_ci * See the License for the specific language governing permissions and
137777dab0Sopenharmony_ci * limitations under the License.
147777dab0Sopenharmony_ci */
157777dab0Sopenharmony_ci
167777dab0Sopenharmony_ci#ifndef QOS_H
177777dab0Sopenharmony_ci#define QOS_H
187777dab0Sopenharmony_ci/**
197777dab0Sopenharmony_ci * @addtogroup QoS
207777dab0Sopenharmony_ci * @{
217777dab0Sopenharmony_ci *
227777dab0Sopenharmony_ci * @brief QoS provides APIs.
237777dab0Sopenharmony_ci *
247777dab0Sopenharmony_ci * @since 12
257777dab0Sopenharmony_ci */
267777dab0Sopenharmony_ci
277777dab0Sopenharmony_ci/**
287777dab0Sopenharmony_ci * @file qos.h
297777dab0Sopenharmony_ci *
307777dab0Sopenharmony_ci * @brief Declares the QoS interfaces in C.
317777dab0Sopenharmony_ci *
327777dab0Sopenharmony_ci * Quality-of-service (QoS) refers to the priority scheduling attribute of tasks
337777dab0Sopenharmony_ci * in OpenHarmony. Developers can use QoS to categorize tasks to be executed to
347777dab0Sopenharmony_ci * indicate the degree of their relevance to user interactions, the system can
357777dab0Sopenharmony_ci * schedule the time and running order of tasks according to the QoS set by the tasks.
367777dab0Sopenharmony_ci *
377777dab0Sopenharmony_ci * @library libqos.so
387777dab0Sopenharmony_ci * @syscap SystemCapability.Resourceschedule.QoS.Core
397777dab0Sopenharmony_ci * @since 12
407777dab0Sopenharmony_ci */
417777dab0Sopenharmony_ci#ifdef __cplusplus
427777dab0Sopenharmony_ciextern "C" {
437777dab0Sopenharmony_ci#endif
447777dab0Sopenharmony_ci
457777dab0Sopenharmony_ci/**
467777dab0Sopenharmony_ci * @brief Describes the level of QoS.
477777dab0Sopenharmony_ci *
487777dab0Sopenharmony_ci * @since 12
497777dab0Sopenharmony_ci */
507777dab0Sopenharmony_citypedef enum QoS_Level {
517777dab0Sopenharmony_ci    /**
527777dab0Sopenharmony_ci     * @brief Means the QoS level is background.
537777dab0Sopenharmony_ci     */
547777dab0Sopenharmony_ci    QOS_BACKGROUND = 0,
557777dab0Sopenharmony_ci
567777dab0Sopenharmony_ci    /**
577777dab0Sopenharmony_ci     * @brief Means the QoS level is utility.
587777dab0Sopenharmony_ci     */
597777dab0Sopenharmony_ci    QOS_UTILITY,
607777dab0Sopenharmony_ci
617777dab0Sopenharmony_ci    /**
627777dab0Sopenharmony_ci     * @brief Means the QoS level is default.
637777dab0Sopenharmony_ci     */
647777dab0Sopenharmony_ci    QOS_DEFAULT,
657777dab0Sopenharmony_ci
667777dab0Sopenharmony_ci    /**
677777dab0Sopenharmony_ci     * @brief Means the QoS level is user-initiated.
687777dab0Sopenharmony_ci     */
697777dab0Sopenharmony_ci    QOS_USER_INITIATED,
707777dab0Sopenharmony_ci
717777dab0Sopenharmony_ci    /**
727777dab0Sopenharmony_ci     * @brief Means the QoS level is user-request.
737777dab0Sopenharmony_ci     */
747777dab0Sopenharmony_ci    QOS_DEADLINE_REQUEST,
757777dab0Sopenharmony_ci
767777dab0Sopenharmony_ci    /**
777777dab0Sopenharmony_ci     * @brief Means the QoS level is user-interactive.
787777dab0Sopenharmony_ci     */
797777dab0Sopenharmony_ci    QOS_USER_INTERACTIVE,
807777dab0Sopenharmony_ci} QoS_Level;
817777dab0Sopenharmony_ci
827777dab0Sopenharmony_ci/**
837777dab0Sopenharmony_ci * @brief Set the QoS level of the current thread.
847777dab0Sopenharmony_ci *
857777dab0Sopenharmony_ci * @param level Indicates the level to set. Specific level can be referenced {@link QoS_Level}.
867777dab0Sopenharmony_ci * @return Returns 0 if the operation is successful; returns -1 if level is out of range or
877777dab0Sopenharmony_ci *         internal error failed.
887777dab0Sopenharmony_ci * @see QoS_Level
897777dab0Sopenharmony_ci * @since 12
907777dab0Sopenharmony_ci */
917777dab0Sopenharmony_ciint OH_QoS_SetThreadQoS(QoS_Level level);
927777dab0Sopenharmony_ci
937777dab0Sopenharmony_ci/**
947777dab0Sopenharmony_ci * @brief Cancel the QoS level of the current thread.
957777dab0Sopenharmony_ci *
967777dab0Sopenharmony_ci * @return Returns 0 if the operation is successful; returns -1 if not set QoS for current thread
977777dab0Sopenharmony_ci *        or internal error failed.
987777dab0Sopenharmony_ci * @see QoS_Level
997777dab0Sopenharmony_ci * @since 12
1007777dab0Sopenharmony_ci */
1017777dab0Sopenharmony_ciint OH_QoS_ResetThreadQoS();
1027777dab0Sopenharmony_ci
1037777dab0Sopenharmony_ci/**
1047777dab0Sopenharmony_ci * @brief Obtains the QoS level of the current thread.
1057777dab0Sopenharmony_ci *
1067777dab0Sopenharmony_ci * @param level This parameter is the output parameter,
1077777dab0Sopenharmony_ci * and the QoS level of the thread as a {@link QoS_Level} is written to this variable.
1087777dab0Sopenharmony_ci * @return Returns 0 if the operation is successful; returns -1 if level is null, not
1097777dab0Sopenharmony_ci *         set QoS for current thread or internal error failed.
1107777dab0Sopenharmony_ci * @see QoS_Level
1117777dab0Sopenharmony_ci * @since 12
1127777dab0Sopenharmony_ci */
1137777dab0Sopenharmony_ciint OH_QoS_GetThreadQoS(QoS_Level *level);
1147777dab0Sopenharmony_ci#ifdef __cplusplus
1157777dab0Sopenharmony_ci};
1167777dab0Sopenharmony_ci#endif
1177777dab0Sopenharmony_ci#endif //QOS_H
118