11bd4fe43Sopenharmony_ci/*
21bd4fe43Sopenharmony_ci * Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
31bd4fe43Sopenharmony_ci * Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
41bd4fe43Sopenharmony_ci *
51bd4fe43Sopenharmony_ci * Redistribution and use in source and binary forms, with or without modification,
61bd4fe43Sopenharmony_ci * are permitted provided that the following conditions are met:
71bd4fe43Sopenharmony_ci *
81bd4fe43Sopenharmony_ci * 1. Redistributions of source code must retain the above copyright notice, this list of
91bd4fe43Sopenharmony_ci *    conditions and the following disclaimer.
101bd4fe43Sopenharmony_ci *
111bd4fe43Sopenharmony_ci * 2. Redistributions in binary form must reproduce the above copyright notice, this list
121bd4fe43Sopenharmony_ci *    of conditions and the following disclaimer in the documentation and/or other materials
131bd4fe43Sopenharmony_ci *    provided with the distribution.
141bd4fe43Sopenharmony_ci *
151bd4fe43Sopenharmony_ci * 3. Neither the name of the copyright holder nor the names of its contributors may be used
161bd4fe43Sopenharmony_ci *    to endorse or promote products derived from this software without specific prior written
171bd4fe43Sopenharmony_ci *    permission.
181bd4fe43Sopenharmony_ci *
191bd4fe43Sopenharmony_ci * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
201bd4fe43Sopenharmony_ci * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
211bd4fe43Sopenharmony_ci * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
221bd4fe43Sopenharmony_ci * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
231bd4fe43Sopenharmony_ci * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
241bd4fe43Sopenharmony_ci * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
251bd4fe43Sopenharmony_ci * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
261bd4fe43Sopenharmony_ci * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
271bd4fe43Sopenharmony_ci * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
281bd4fe43Sopenharmony_ci * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
291bd4fe43Sopenharmony_ci * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
301bd4fe43Sopenharmony_ci */
311bd4fe43Sopenharmony_ci
321bd4fe43Sopenharmony_ci#include "cmsis_os.h"
331bd4fe43Sopenharmony_ci#include "los_typedef.h"
341bd4fe43Sopenharmony_ci#include "los_printf.h"
351bd4fe43Sopenharmony_ci
361bd4fe43Sopenharmony_ci#include "los_event.h"
371bd4fe43Sopenharmony_ci#include "los_membox.h"
381bd4fe43Sopenharmony_ci#include "los_memory.h"
391bd4fe43Sopenharmony_ci#include "los_hwi.h"
401bd4fe43Sopenharmony_ci
411bd4fe43Sopenharmony_ci#include "los_mux_pri.h"
421bd4fe43Sopenharmony_ci#include "los_queue_pri.h"
431bd4fe43Sopenharmony_ci#include "los_sem_pri.h"
441bd4fe43Sopenharmony_ci#include "los_swtmr_pri.h"
451bd4fe43Sopenharmony_ci#include "los_sys_pri.h"
461bd4fe43Sopenharmony_ci#include "los_task_pri.h"
471bd4fe43Sopenharmony_ci#include "los_tick_pri.h"
481bd4fe43Sopenharmony_ci#include "string.h"
491bd4fe43Sopenharmony_ci#include "securec.h"
501bd4fe43Sopenharmony_ci
511bd4fe43Sopenharmony_ci#ifdef __cplusplus
521bd4fe43Sopenharmony_ci#if __cplusplus
531bd4fe43Sopenharmony_ciextern "C" {
541bd4fe43Sopenharmony_ci#endif /* __cplusplus */
551bd4fe43Sopenharmony_ci#endif /* __cplusplus */
561bd4fe43Sopenharmony_ci#if (CMSIS_OS_VER == 2)
571bd4fe43Sopenharmony_ci
581bd4fe43Sopenharmony_ci/* Kernel initialization state */
591bd4fe43Sopenharmony_cistatic osKernelState_t g_kernelState;
601bd4fe43Sopenharmony_ci
611bd4fe43Sopenharmony_ciextern BOOL g_taskScheduled;
621bd4fe43Sopenharmony_ci
631bd4fe43Sopenharmony_ci#define LOS_PRIORITY_WIN 8
641bd4fe43Sopenharmony_ci
651bd4fe43Sopenharmony_ciconst osVersion_t g_stLosVersion = { 001, 001 };
661bd4fe43Sopenharmony_ci
671bd4fe43Sopenharmony_ci#define LITEOS_VERSION_MAJOR 1
681bd4fe43Sopenharmony_ci#define LITEOS_VERSION_MINOR 0
691bd4fe43Sopenharmony_ci#define LITEOS_VERSION_BUILD 0
701bd4fe43Sopenharmony_ci
711bd4fe43Sopenharmony_ci/* Kernel version and identification string definition */
721bd4fe43Sopenharmony_ci#define KERNEL_VERSION            (((UINT32)LITEOS_VERSION_MAJOR * 10000000UL) | \
731bd4fe43Sopenharmony_ci                                   ((UINT32)LITEOS_VERSION_MINOR *    10000UL) | \
741bd4fe43Sopenharmony_ci                                   ((UINT32)LITEOS_VERSION_BUILD *        1UL))
751bd4fe43Sopenharmony_ci
761bd4fe43Sopenharmony_ci#define KERNEL_ID "HUAWEI-LiteOS"
771bd4fe43Sopenharmony_ci#define UNUSED(var) do { (void)var; } while (0)
781bd4fe43Sopenharmony_ci
791bd4fe43Sopenharmony_ci//  ==== Kernel Management Functions ====
801bd4fe43Sopenharmony_ciuint32_t osTaskStackWaterMarkGet(UINT32 taskID);
811bd4fe43Sopenharmony_ci
821bd4fe43Sopenharmony_ci
831bd4fe43Sopenharmony_ciosStatus_t osKernelInitialize(void)
841bd4fe43Sopenharmony_ci{
851bd4fe43Sopenharmony_ci    if (OS_INT_ACTIVE) {
861bd4fe43Sopenharmony_ci        return osErrorISR;
871bd4fe43Sopenharmony_ci    }
881bd4fe43Sopenharmony_ci
891bd4fe43Sopenharmony_ci    if (g_kernelState != osKernelInactive) {
901bd4fe43Sopenharmony_ci        return osError;
911bd4fe43Sopenharmony_ci    }
921bd4fe43Sopenharmony_ci
931bd4fe43Sopenharmony_ci    if (LOS_OK == LOS_KernelInit()) {
941bd4fe43Sopenharmony_ci        g_kernelState = osKernelReady;
951bd4fe43Sopenharmony_ci        return osOK;
961bd4fe43Sopenharmony_ci    } else {
971bd4fe43Sopenharmony_ci        return osError;
981bd4fe43Sopenharmony_ci    }
991bd4fe43Sopenharmony_ci}
1001bd4fe43Sopenharmony_ci
1011bd4fe43Sopenharmony_ci
1021bd4fe43Sopenharmony_ciosStatus_t osKernelGetInfo(osVersion_t *version, char *id_buf, uint32_t id_size)
1031bd4fe43Sopenharmony_ci{
1041bd4fe43Sopenharmony_ci    uint32_t uwRet;
1051bd4fe43Sopenharmony_ci
1061bd4fe43Sopenharmony_ci    if (OS_INT_ACTIVE) {
1071bd4fe43Sopenharmony_ci        return osErrorISR;
1081bd4fe43Sopenharmony_ci    }
1091bd4fe43Sopenharmony_ci
1101bd4fe43Sopenharmony_ci    if (version != NULL) {
1111bd4fe43Sopenharmony_ci        version->api = g_stLosVersion.api;
1121bd4fe43Sopenharmony_ci        version->kernel = g_stLosVersion.kernel;
1131bd4fe43Sopenharmony_ci    }
1141bd4fe43Sopenharmony_ci
1151bd4fe43Sopenharmony_ci    if ((id_buf != NULL) && (id_size != 0U)) {
1161bd4fe43Sopenharmony_ci        if (id_size > sizeof(KERNEL_ID)) {
1171bd4fe43Sopenharmony_ci            id_size = sizeof(KERNEL_ID);
1181bd4fe43Sopenharmony_ci        }
1191bd4fe43Sopenharmony_ci        uwRet = memcpy_s(id_buf, id_size, KERNEL_ID, id_size);
1201bd4fe43Sopenharmony_ci        if (uwRet != EOK) {
1211bd4fe43Sopenharmony_ci            PRINT_ERR("%s[%d] memcpy failed, error type = %u\n", __FUNCTION__, __LINE__, uwRet);
1221bd4fe43Sopenharmony_ci            return osError;
1231bd4fe43Sopenharmony_ci        }
1241bd4fe43Sopenharmony_ci    }
1251bd4fe43Sopenharmony_ci
1261bd4fe43Sopenharmony_ci    return osOK;
1271bd4fe43Sopenharmony_ci}
1281bd4fe43Sopenharmony_ci
1291bd4fe43Sopenharmony_ci
1301bd4fe43Sopenharmony_ciosKernelState_t osKernelGetState(void)
1311bd4fe43Sopenharmony_ci{
1321bd4fe43Sopenharmony_ci    if (OS_INT_ACTIVE) {
1331bd4fe43Sopenharmony_ci        return osKernelError;
1341bd4fe43Sopenharmony_ci    }
1351bd4fe43Sopenharmony_ci
1361bd4fe43Sopenharmony_ci    if (!g_taskScheduled) {
1371bd4fe43Sopenharmony_ci        if (g_kernelState == osKernelReady) {
1381bd4fe43Sopenharmony_ci            return osKernelReady;
1391bd4fe43Sopenharmony_ci        } else {
1401bd4fe43Sopenharmony_ci            return osKernelInactive;
1411bd4fe43Sopenharmony_ci        }
1421bd4fe43Sopenharmony_ci    } else if (g_losTaskLock > 0) {
1431bd4fe43Sopenharmony_ci        return osKernelLocked;
1441bd4fe43Sopenharmony_ci    } else {
1451bd4fe43Sopenharmony_ci        return osKernelRunning;
1461bd4fe43Sopenharmony_ci    }
1471bd4fe43Sopenharmony_ci}
1481bd4fe43Sopenharmony_ci
1491bd4fe43Sopenharmony_ci
1501bd4fe43Sopenharmony_ciosStatus_t osKernelStart(void)
1511bd4fe43Sopenharmony_ci{
1521bd4fe43Sopenharmony_ci    if (OS_INT_ACTIVE) {
1531bd4fe43Sopenharmony_ci        return osErrorISR;
1541bd4fe43Sopenharmony_ci    }
1551bd4fe43Sopenharmony_ci
1561bd4fe43Sopenharmony_ci    if (g_kernelState == osKernelReady) {
1571bd4fe43Sopenharmony_ci        if (LOS_OK == LOS_Start()) {
1581bd4fe43Sopenharmony_ci            g_kernelState = osKernelRunning;
1591bd4fe43Sopenharmony_ci            return osOK;
1601bd4fe43Sopenharmony_ci        } else {
1611bd4fe43Sopenharmony_ci            return osError;
1621bd4fe43Sopenharmony_ci        }
1631bd4fe43Sopenharmony_ci    } else {
1641bd4fe43Sopenharmony_ci        return osError;
1651bd4fe43Sopenharmony_ci    }
1661bd4fe43Sopenharmony_ci}
1671bd4fe43Sopenharmony_ci
1681bd4fe43Sopenharmony_ci
1691bd4fe43Sopenharmony_ciint32_t osKernelLock(void)
1701bd4fe43Sopenharmony_ci{
1711bd4fe43Sopenharmony_ci    int32_t lock;
1721bd4fe43Sopenharmony_ci
1731bd4fe43Sopenharmony_ci    if (OS_INT_ACTIVE) {
1741bd4fe43Sopenharmony_ci        return (int32_t)osErrorISR;
1751bd4fe43Sopenharmony_ci    }
1761bd4fe43Sopenharmony_ci
1771bd4fe43Sopenharmony_ci    if (!g_taskScheduled) {
1781bd4fe43Sopenharmony_ci        return (int32_t)osError;
1791bd4fe43Sopenharmony_ci    }
1801bd4fe43Sopenharmony_ci
1811bd4fe43Sopenharmony_ci    if (g_losTaskLock > 0) {
1821bd4fe43Sopenharmony_ci        lock = 1;
1831bd4fe43Sopenharmony_ci    } else {
1841bd4fe43Sopenharmony_ci        LOS_TaskLock();
1851bd4fe43Sopenharmony_ci        lock = 0;
1861bd4fe43Sopenharmony_ci    }
1871bd4fe43Sopenharmony_ci
1881bd4fe43Sopenharmony_ci    return lock;
1891bd4fe43Sopenharmony_ci}
1901bd4fe43Sopenharmony_ci
1911bd4fe43Sopenharmony_ci
1921bd4fe43Sopenharmony_ciint32_t osKernelUnlock(void)
1931bd4fe43Sopenharmony_ci{
1941bd4fe43Sopenharmony_ci    int32_t lock;
1951bd4fe43Sopenharmony_ci
1961bd4fe43Sopenharmony_ci    if (OS_INT_ACTIVE) {
1971bd4fe43Sopenharmony_ci        return (int32_t)osErrorISR;
1981bd4fe43Sopenharmony_ci    }
1991bd4fe43Sopenharmony_ci
2001bd4fe43Sopenharmony_ci    if (!g_taskScheduled) {
2011bd4fe43Sopenharmony_ci        return (int32_t)osError;
2021bd4fe43Sopenharmony_ci    }
2031bd4fe43Sopenharmony_ci
2041bd4fe43Sopenharmony_ci    if (g_losTaskLock > 0) {
2051bd4fe43Sopenharmony_ci        LOS_TaskUnlock();
2061bd4fe43Sopenharmony_ci        if (g_losTaskLock != 0) {
2071bd4fe43Sopenharmony_ci            return (int32_t)osError;
2081bd4fe43Sopenharmony_ci        }
2091bd4fe43Sopenharmony_ci        lock = 1;
2101bd4fe43Sopenharmony_ci    } else {
2111bd4fe43Sopenharmony_ci        lock = 0;
2121bd4fe43Sopenharmony_ci    }
2131bd4fe43Sopenharmony_ci
2141bd4fe43Sopenharmony_ci    return lock;
2151bd4fe43Sopenharmony_ci}
2161bd4fe43Sopenharmony_ci
2171bd4fe43Sopenharmony_ci
2181bd4fe43Sopenharmony_ciint32_t osKernelRestoreLock(int32_t lock)
2191bd4fe43Sopenharmony_ci{
2201bd4fe43Sopenharmony_ci    if (OS_INT_ACTIVE) {
2211bd4fe43Sopenharmony_ci        return (int32_t)osErrorISR;
2221bd4fe43Sopenharmony_ci    }
2231bd4fe43Sopenharmony_ci
2241bd4fe43Sopenharmony_ci    if (!g_taskScheduled) {
2251bd4fe43Sopenharmony_ci        return (int32_t)osError;
2261bd4fe43Sopenharmony_ci    }
2271bd4fe43Sopenharmony_ci
2281bd4fe43Sopenharmony_ci    switch (lock) {
2291bd4fe43Sopenharmony_ci        case 0:
2301bd4fe43Sopenharmony_ci            LOS_TaskUnlock();
2311bd4fe43Sopenharmony_ci            if (g_losTaskLock != 0) {
2321bd4fe43Sopenharmony_ci                break;
2331bd4fe43Sopenharmony_ci            }
2341bd4fe43Sopenharmony_ci            return 0;
2351bd4fe43Sopenharmony_ci        case 1:
2361bd4fe43Sopenharmony_ci            LOS_TaskLock();
2371bd4fe43Sopenharmony_ci            return 1;
2381bd4fe43Sopenharmony_ci        default:
2391bd4fe43Sopenharmony_ci            break;
2401bd4fe43Sopenharmony_ci    }
2411bd4fe43Sopenharmony_ci
2421bd4fe43Sopenharmony_ci    return (int32_t)osError;
2431bd4fe43Sopenharmony_ci}
2441bd4fe43Sopenharmony_ci
2451bd4fe43Sopenharmony_ci
2461bd4fe43Sopenharmony_ciuint32_t osKernelGetTickCount(void)
2471bd4fe43Sopenharmony_ci{
2481bd4fe43Sopenharmony_ci    uint64_t ticks;
2491bd4fe43Sopenharmony_ci    UINTPTR uvIntSave;
2501bd4fe43Sopenharmony_ci
2511bd4fe43Sopenharmony_ci    if (OS_INT_ACTIVE) {
2521bd4fe43Sopenharmony_ci#ifndef LITEOS_WIFI_IOT_VERSION
2531bd4fe43Sopenharmony_ci        ticks = g_ullTickCount;
2541bd4fe43Sopenharmony_ci#else
2551bd4fe43Sopenharmony_ci        ticks = g_tickCount;
2561bd4fe43Sopenharmony_ci#endif
2571bd4fe43Sopenharmony_ci    } else {
2581bd4fe43Sopenharmony_ci        uvIntSave = LOS_IntLock();
2591bd4fe43Sopenharmony_ci#ifndef LITEOS_WIFI_IOT_VERSION
2601bd4fe43Sopenharmony_ci        ticks = g_ullTickCount;
2611bd4fe43Sopenharmony_ci#else
2621bd4fe43Sopenharmony_ci        ticks = g_tickCount;
2631bd4fe43Sopenharmony_ci#endif
2641bd4fe43Sopenharmony_ci        LOS_IntRestore(uvIntSave);
2651bd4fe43Sopenharmony_ci    }
2661bd4fe43Sopenharmony_ci
2671bd4fe43Sopenharmony_ci    return (uint32_t)ticks;
2681bd4fe43Sopenharmony_ci}
2691bd4fe43Sopenharmony_ci
2701bd4fe43Sopenharmony_ciuint32_t osKernelGetTickFreq(void)
2711bd4fe43Sopenharmony_ci{
2721bd4fe43Sopenharmony_ci    uint32_t freq;
2731bd4fe43Sopenharmony_ci
2741bd4fe43Sopenharmony_ci    if (OS_INT_ACTIVE) {
2751bd4fe43Sopenharmony_ci        freq = 0U;
2761bd4fe43Sopenharmony_ci    } else {
2771bd4fe43Sopenharmony_ci        freq = LOSCFG_BASE_CORE_TICK_PER_SECOND;
2781bd4fe43Sopenharmony_ci    }
2791bd4fe43Sopenharmony_ci
2801bd4fe43Sopenharmony_ci    return (freq);
2811bd4fe43Sopenharmony_ci}
2821bd4fe43Sopenharmony_ci
2831bd4fe43Sopenharmony_ciextern VOID LOS_GetCpuCycle(UINT32 *puwCntHi, UINT32 *puwCntLo);
2841bd4fe43Sopenharmony_ciuint32_t osKernelGetSysTimerCount(void)
2851bd4fe43Sopenharmony_ci{
2861bd4fe43Sopenharmony_ci    uint32_t countHigh = 0;
2871bd4fe43Sopenharmony_ci    uint32_t countLow = 0;
2881bd4fe43Sopenharmony_ci    if (OS_INT_ACTIVE) {
2891bd4fe43Sopenharmony_ci        countLow = 0U;
2901bd4fe43Sopenharmony_ci    } else {
2911bd4fe43Sopenharmony_ci        LOS_GetCpuCycle((UINT32 *)&countHigh, (UINT32 *)&countLow);
2921bd4fe43Sopenharmony_ci    }
2931bd4fe43Sopenharmony_ci    return countLow;
2941bd4fe43Sopenharmony_ci}
2951bd4fe43Sopenharmony_ci
2961bd4fe43Sopenharmony_ci
2971bd4fe43Sopenharmony_ciuint32_t osKernelGetSysTimerFreq(void)
2981bd4fe43Sopenharmony_ci{
2991bd4fe43Sopenharmony_ci    return OS_SYS_CLOCK;
3001bd4fe43Sopenharmony_ci}
3011bd4fe43Sopenharmony_ci
3021bd4fe43Sopenharmony_ci
3031bd4fe43Sopenharmony_ci//  ==== Thread Management Functions ====
3041bd4fe43Sopenharmony_ci
3051bd4fe43Sopenharmony_ciosThreadId_t osThreadNew(osThreadFunc_t func, void *argument, const osThreadAttr_t *attr)
3061bd4fe43Sopenharmony_ci{
3071bd4fe43Sopenharmony_ci    UINT32 uwTid;
3081bd4fe43Sopenharmony_ci    UINT32 uwRet;
3091bd4fe43Sopenharmony_ci    LosTaskCB *pstTaskCB = NULL;
3101bd4fe43Sopenharmony_ci    TSK_INIT_PARAM_S stTskInitParam;
3111bd4fe43Sopenharmony_ci
3121bd4fe43Sopenharmony_ci    if (OS_INT_ACTIVE) {
3131bd4fe43Sopenharmony_ci        return NULL;
3141bd4fe43Sopenharmony_ci    }
3151bd4fe43Sopenharmony_ci
3161bd4fe43Sopenharmony_ci    if ((attr == NULL) || (func == NULL) || (attr->priority < osPriorityLow1) ||
3171bd4fe43Sopenharmony_ci        (attr->priority > osPriorityAboveNormal6)) {
3181bd4fe43Sopenharmony_ci        return (osThreadId_t)NULL;
3191bd4fe43Sopenharmony_ci    }
3201bd4fe43Sopenharmony_ci
3211bd4fe43Sopenharmony_ci    (void)memset_s(&stTskInitParam, sizeof(TSK_INIT_PARAM_S), 0, sizeof(TSK_INIT_PARAM_S));
3221bd4fe43Sopenharmony_ci    stTskInitParam.pfnTaskEntry = (TSK_ENTRY_FUNC)func;
3231bd4fe43Sopenharmony_ci#ifndef LITEOS_WIFI_IOT_VERSION
3241bd4fe43Sopenharmony_ci    stTskInitParam.uwArg = (UINT32)argument;
3251bd4fe43Sopenharmony_ci#else
3261bd4fe43Sopenharmony_ci    stTskInitParam.auwArgs[0] = (UINT32)argument;
3271bd4fe43Sopenharmony_ci#endif
3281bd4fe43Sopenharmony_ci    stTskInitParam.uwStackSize = attr->stack_size;
3291bd4fe43Sopenharmony_ci    stTskInitParam.pcName = (CHAR *)attr->name;
3301bd4fe43Sopenharmony_ci    stTskInitParam.usTaskPrio = OS_TASK_PRIORITY_LOWEST - ((UINT16)(attr->priority) - LOS_PRIORITY_WIN); /* 0~31 */
3311bd4fe43Sopenharmony_ci
3321bd4fe43Sopenharmony_ci    uwRet = LOS_TaskCreate(&uwTid, &stTskInitParam);
3331bd4fe43Sopenharmony_ci
3341bd4fe43Sopenharmony_ci    if (LOS_OK != uwRet) {
3351bd4fe43Sopenharmony_ci        return (osThreadId_t)NULL;
3361bd4fe43Sopenharmony_ci    }
3371bd4fe43Sopenharmony_ci
3381bd4fe43Sopenharmony_ci    pstTaskCB = OS_TCB_FROM_TID(uwTid);
3391bd4fe43Sopenharmony_ci
3401bd4fe43Sopenharmony_ci    return (osThreadId_t)pstTaskCB;
3411bd4fe43Sopenharmony_ci}
3421bd4fe43Sopenharmony_ci
3431bd4fe43Sopenharmony_ci
3441bd4fe43Sopenharmony_ciconst char *osThreadGetName(osThreadId_t thread_id)
3451bd4fe43Sopenharmony_ci{
3461bd4fe43Sopenharmony_ci    LosTaskCB *pstTaskCB = NULL;
3471bd4fe43Sopenharmony_ci
3481bd4fe43Sopenharmony_ci    if (OS_INT_ACTIVE || thread_id == NULL) {
3491bd4fe43Sopenharmony_ci        return NULL;
3501bd4fe43Sopenharmony_ci    }
3511bd4fe43Sopenharmony_ci
3521bd4fe43Sopenharmony_ci    pstTaskCB = (LosTaskCB *)thread_id;
3531bd4fe43Sopenharmony_ci
3541bd4fe43Sopenharmony_ci    return pstTaskCB->taskName;
3551bd4fe43Sopenharmony_ci}
3561bd4fe43Sopenharmony_ci
3571bd4fe43Sopenharmony_ci
3581bd4fe43Sopenharmony_ciosThreadId_t osThreadGetId(void)
3591bd4fe43Sopenharmony_ci{
3601bd4fe43Sopenharmony_ci    if (OS_INT_ACTIVE) {
3611bd4fe43Sopenharmony_ci        return NULL;
3621bd4fe43Sopenharmony_ci    }
3631bd4fe43Sopenharmony_ci
3641bd4fe43Sopenharmony_ci    return (osThreadId_t)(g_losTask.runTask);
3651bd4fe43Sopenharmony_ci}
3661bd4fe43Sopenharmony_ci
3671bd4fe43Sopenharmony_civoid *osThreadGetArgument(void)
3681bd4fe43Sopenharmony_ci{
3691bd4fe43Sopenharmony_ci    if (OS_INT_ACTIVE) {
3701bd4fe43Sopenharmony_ci        return 0;
3711bd4fe43Sopenharmony_ci    }
3721bd4fe43Sopenharmony_ci
3731bd4fe43Sopenharmony_ci    LosTaskCB *taskCb = (LosTaskCB *)osThreadGetId();
3741bd4fe43Sopenharmony_ci    if (taskCb == NULL) {
3751bd4fe43Sopenharmony_ci        return NULL;
3761bd4fe43Sopenharmony_ci    }
3771bd4fe43Sopenharmony_ci#ifndef LITEOS_WIFI_IOT_VERSION
3781bd4fe43Sopenharmony_ci    return (void *)(taskCb->arg);
3791bd4fe43Sopenharmony_ci#else
3801bd4fe43Sopenharmony_ci    return (void *)(taskCb->args[0]);
3811bd4fe43Sopenharmony_ci#endif
3821bd4fe43Sopenharmony_ci}
3831bd4fe43Sopenharmony_ci
3841bd4fe43Sopenharmony_ciosThreadState_t osThreadGetState(osThreadId_t thread_id)
3851bd4fe43Sopenharmony_ci{
3861bd4fe43Sopenharmony_ci    UINT16 taskStatus;
3871bd4fe43Sopenharmony_ci    osThreadState_t stState;
3881bd4fe43Sopenharmony_ci    LosTaskCB *pstTaskCB = NULL;
3891bd4fe43Sopenharmony_ci
3901bd4fe43Sopenharmony_ci    if (OS_INT_ACTIVE || thread_id == NULL) {
3911bd4fe43Sopenharmony_ci        return osThreadError;
3921bd4fe43Sopenharmony_ci    }
3931bd4fe43Sopenharmony_ci
3941bd4fe43Sopenharmony_ci    pstTaskCB = (LosTaskCB *)thread_id;
3951bd4fe43Sopenharmony_ci    taskStatus = pstTaskCB->taskStatus;
3961bd4fe43Sopenharmony_ci
3971bd4fe43Sopenharmony_ci    if (taskStatus & OS_TASK_STATUS_RUNNING) {
3981bd4fe43Sopenharmony_ci        stState = osThreadRunning;
3991bd4fe43Sopenharmony_ci    } else if (taskStatus & OS_TASK_STATUS_READY) {
4001bd4fe43Sopenharmony_ci        stState = osThreadReady;
4011bd4fe43Sopenharmony_ci    } else if (taskStatus &
4021bd4fe43Sopenharmony_ci        (OS_TASK_STATUS_DELAY | OS_TASK_STATUS_PEND | OS_TASK_STATUS_SUSPEND | OS_TASK_STATUS_PEND_QUEUE)) {
4031bd4fe43Sopenharmony_ci        stState = osThreadBlocked;
4041bd4fe43Sopenharmony_ci    } else if (taskStatus & OS_TASK_STATUS_UNUSED) {
4051bd4fe43Sopenharmony_ci        stState = osThreadInactive;
4061bd4fe43Sopenharmony_ci    } else {
4071bd4fe43Sopenharmony_ci        stState = osThreadError;
4081bd4fe43Sopenharmony_ci    }
4091bd4fe43Sopenharmony_ci
4101bd4fe43Sopenharmony_ci    return stState;
4111bd4fe43Sopenharmony_ci}
4121bd4fe43Sopenharmony_ci
4131bd4fe43Sopenharmony_ci
4141bd4fe43Sopenharmony_ciuint32_t osThreadGetStackSize(osThreadId_t thread_id)
4151bd4fe43Sopenharmony_ci{
4161bd4fe43Sopenharmony_ci    LosTaskCB *pstTaskCB = NULL;
4171bd4fe43Sopenharmony_ci
4181bd4fe43Sopenharmony_ci    if (OS_INT_ACTIVE || thread_id == NULL) {
4191bd4fe43Sopenharmony_ci        return 0U;
4201bd4fe43Sopenharmony_ci    }
4211bd4fe43Sopenharmony_ci
4221bd4fe43Sopenharmony_ci    pstTaskCB = (LosTaskCB *)thread_id;
4231bd4fe43Sopenharmony_ci
4241bd4fe43Sopenharmony_ci    return pstTaskCB->stackSize;
4251bd4fe43Sopenharmony_ci}
4261bd4fe43Sopenharmony_ci
4271bd4fe43Sopenharmony_ci
4281bd4fe43Sopenharmony_ciuint32_t osTaskStackWaterMarkGet(UINT32 taskID)
4291bd4fe43Sopenharmony_ci{
4301bd4fe43Sopenharmony_ci    UINT32 uwCount = 0;
4311bd4fe43Sopenharmony_ci    UINT32 *ptopOfStack;
4321bd4fe43Sopenharmony_ci    UINTPTR uvIntSave;
4331bd4fe43Sopenharmony_ci    LosTaskCB *pstTaskCB = NULL;
4341bd4fe43Sopenharmony_ci
4351bd4fe43Sopenharmony_ci    if (taskID > LOSCFG_BASE_CORE_TSK_LIMIT) {
4361bd4fe43Sopenharmony_ci        return 0;
4371bd4fe43Sopenharmony_ci    }
4381bd4fe43Sopenharmony_ci
4391bd4fe43Sopenharmony_ci    uvIntSave = LOS_IntLock();
4401bd4fe43Sopenharmony_ci
4411bd4fe43Sopenharmony_ci    pstTaskCB = OS_TCB_FROM_TID(taskID);
4421bd4fe43Sopenharmony_ci    if (OS_TASK_STATUS_UNUSED & (pstTaskCB->taskStatus)) {
4431bd4fe43Sopenharmony_ci        LOS_IntRestore(uvIntSave);
4441bd4fe43Sopenharmony_ci        return 0;
4451bd4fe43Sopenharmony_ci    }
4461bd4fe43Sopenharmony_ci
4471bd4fe43Sopenharmony_ci    // first 4 bytes is OS_TASK_MAGIC_WORD, skip
4481bd4fe43Sopenharmony_ci    ptopOfStack = (UINT32 *)(UINTPTR)pstTaskCB->topOfStack + 1;
4491bd4fe43Sopenharmony_ci
4501bd4fe43Sopenharmony_ci    while (*ptopOfStack == (UINT32)OS_TASK_STACK_INIT) {
4511bd4fe43Sopenharmony_ci        ++ptopOfStack;
4521bd4fe43Sopenharmony_ci        ++uwCount;
4531bd4fe43Sopenharmony_ci    }
4541bd4fe43Sopenharmony_ci
4551bd4fe43Sopenharmony_ci    uwCount *= sizeof(UINT32);
4561bd4fe43Sopenharmony_ci
4571bd4fe43Sopenharmony_ci    LOS_IntRestore(uvIntSave);
4581bd4fe43Sopenharmony_ci    return uwCount;
4591bd4fe43Sopenharmony_ci}
4601bd4fe43Sopenharmony_ci
4611bd4fe43Sopenharmony_ci
4621bd4fe43Sopenharmony_ciuint32_t osThreadGetStackSpace(osThreadId_t thread_id)
4631bd4fe43Sopenharmony_ci{
4641bd4fe43Sopenharmony_ci    LosTaskCB *pstTaskCB = NULL;
4651bd4fe43Sopenharmony_ci
4661bd4fe43Sopenharmony_ci    if (OS_INT_ACTIVE || thread_id == NULL) {
4671bd4fe43Sopenharmony_ci        return 0U;
4681bd4fe43Sopenharmony_ci    }
4691bd4fe43Sopenharmony_ci
4701bd4fe43Sopenharmony_ci    pstTaskCB = (LosTaskCB *)thread_id;
4711bd4fe43Sopenharmony_ci
4721bd4fe43Sopenharmony_ci    return osTaskStackWaterMarkGet(pstTaskCB->taskID);
4731bd4fe43Sopenharmony_ci}
4741bd4fe43Sopenharmony_ci
4751bd4fe43Sopenharmony_ci
4761bd4fe43Sopenharmony_ciosStatus_t osThreadSetPriority(osThreadId_t thread_id, osPriority_t priority)
4771bd4fe43Sopenharmony_ci{
4781bd4fe43Sopenharmony_ci    UINT32 uwRet;
4791bd4fe43Sopenharmony_ci    UINT16 usPriority;
4801bd4fe43Sopenharmony_ci    LosTaskCB *pstTaskCB = NULL;
4811bd4fe43Sopenharmony_ci
4821bd4fe43Sopenharmony_ci    if (OS_INT_ACTIVE) {
4831bd4fe43Sopenharmony_ci        return osErrorISR;
4841bd4fe43Sopenharmony_ci    }
4851bd4fe43Sopenharmony_ci
4861bd4fe43Sopenharmony_ci    if (thread_id == NULL) {
4871bd4fe43Sopenharmony_ci        return osErrorParameter;
4881bd4fe43Sopenharmony_ci    }
4891bd4fe43Sopenharmony_ci
4901bd4fe43Sopenharmony_ci    if (priority < osPriorityLow1 || priority > osPriorityAboveNormal6) {
4911bd4fe43Sopenharmony_ci        return osErrorParameter;
4921bd4fe43Sopenharmony_ci    }
4931bd4fe43Sopenharmony_ci
4941bd4fe43Sopenharmony_ci    pstTaskCB = (LosTaskCB *)thread_id;
4951bd4fe43Sopenharmony_ci    usPriority = OS_TASK_PRIORITY_LOWEST - ((UINT16)priority - LOS_PRIORITY_WIN);
4961bd4fe43Sopenharmony_ci    uwRet = LOS_TaskPriSet(pstTaskCB->taskID, usPriority);
4971bd4fe43Sopenharmony_ci    switch (uwRet) {
4981bd4fe43Sopenharmony_ci        case LOS_ERRNO_TSK_PRIOR_ERROR:
4991bd4fe43Sopenharmony_ci        case LOS_ERRNO_TSK_OPERATE_IDLE:
5001bd4fe43Sopenharmony_ci        case LOS_ERRNO_TSK_ID_INVALID:
5011bd4fe43Sopenharmony_ci            return osErrorParameter;
5021bd4fe43Sopenharmony_ci
5031bd4fe43Sopenharmony_ci        case LOS_ERRNO_TSK_NOT_CREATED:
5041bd4fe43Sopenharmony_ci            return osErrorResource;
5051bd4fe43Sopenharmony_ci
5061bd4fe43Sopenharmony_ci        default:
5071bd4fe43Sopenharmony_ci            return osOK;
5081bd4fe43Sopenharmony_ci    }
5091bd4fe43Sopenharmony_ci}
5101bd4fe43Sopenharmony_ci
5111bd4fe43Sopenharmony_ci
5121bd4fe43Sopenharmony_ciosPriority_t osThreadGetPriority(osThreadId_t thread_id)
5131bd4fe43Sopenharmony_ci{
5141bd4fe43Sopenharmony_ci    UINT16 usRet;
5151bd4fe43Sopenharmony_ci    LosTaskCB *pstTaskCB = NULL;
5161bd4fe43Sopenharmony_ci
5171bd4fe43Sopenharmony_ci    if (OS_INT_ACTIVE || thread_id == NULL) {
5181bd4fe43Sopenharmony_ci        return osPriorityError;
5191bd4fe43Sopenharmony_ci    }
5201bd4fe43Sopenharmony_ci
5211bd4fe43Sopenharmony_ci    pstTaskCB = (LosTaskCB *)thread_id;
5221bd4fe43Sopenharmony_ci    usRet = LOS_TaskPriGet(pstTaskCB->taskID);
5231bd4fe43Sopenharmony_ci
5241bd4fe43Sopenharmony_ci    if (usRet == (UINT16)OS_INVALID) {
5251bd4fe43Sopenharmony_ci        return osPriorityError;
5261bd4fe43Sopenharmony_ci    }
5271bd4fe43Sopenharmony_ci
5281bd4fe43Sopenharmony_ci    return (osPriority_t)(OS_TASK_PRIORITY_LOWEST - (usRet - LOS_PRIORITY_WIN));
5291bd4fe43Sopenharmony_ci}
5301bd4fe43Sopenharmony_ci
5311bd4fe43Sopenharmony_ci
5321bd4fe43Sopenharmony_ciosStatus_t osThreadYield(void)
5331bd4fe43Sopenharmony_ci{
5341bd4fe43Sopenharmony_ci    UINT32 uwRet;
5351bd4fe43Sopenharmony_ci
5361bd4fe43Sopenharmony_ci    if (OS_INT_ACTIVE) {
5371bd4fe43Sopenharmony_ci        return osErrorISR;
5381bd4fe43Sopenharmony_ci    }
5391bd4fe43Sopenharmony_ci
5401bd4fe43Sopenharmony_ci    uwRet = LOS_TaskYield();
5411bd4fe43Sopenharmony_ci
5421bd4fe43Sopenharmony_ci    if (uwRet == LOS_OK) {
5431bd4fe43Sopenharmony_ci        return osOK;
5441bd4fe43Sopenharmony_ci    }
5451bd4fe43Sopenharmony_ci
5461bd4fe43Sopenharmony_ci    return osError;
5471bd4fe43Sopenharmony_ci}
5481bd4fe43Sopenharmony_ci
5491bd4fe43Sopenharmony_ci
5501bd4fe43Sopenharmony_ciosStatus_t osThreadSuspend(osThreadId_t thread_id)
5511bd4fe43Sopenharmony_ci{
5521bd4fe43Sopenharmony_ci    UINT32 uwRet;
5531bd4fe43Sopenharmony_ci    LosTaskCB *pstTaskCB = NULL;
5541bd4fe43Sopenharmony_ci
5551bd4fe43Sopenharmony_ci    if (OS_INT_ACTIVE) {
5561bd4fe43Sopenharmony_ci        return osErrorISR;
5571bd4fe43Sopenharmony_ci    }
5581bd4fe43Sopenharmony_ci
5591bd4fe43Sopenharmony_ci    if (thread_id == NULL) {
5601bd4fe43Sopenharmony_ci        return osErrorParameter;
5611bd4fe43Sopenharmony_ci    }
5621bd4fe43Sopenharmony_ci
5631bd4fe43Sopenharmony_ci    pstTaskCB = (LosTaskCB *)thread_id;
5641bd4fe43Sopenharmony_ci    uwRet = LOS_TaskSuspend(pstTaskCB->taskID);
5651bd4fe43Sopenharmony_ci    switch (uwRet) {
5661bd4fe43Sopenharmony_ci        case LOS_ERRNO_TSK_OPERATE_IDLE:
5671bd4fe43Sopenharmony_ci        case LOS_ERRNO_TSK_SUSPEND_SWTMR_NOT_ALLOWED:
5681bd4fe43Sopenharmony_ci        case LOS_ERRNO_TSK_ID_INVALID:
5691bd4fe43Sopenharmony_ci            return osErrorParameter;
5701bd4fe43Sopenharmony_ci
5711bd4fe43Sopenharmony_ci        case LOS_ERRNO_TSK_NOT_CREATED:
5721bd4fe43Sopenharmony_ci        case LOS_ERRNO_TSK_ALREADY_SUSPENDED:
5731bd4fe43Sopenharmony_ci        case LOS_ERRNO_TSK_SUSPEND_LOCKED:
5741bd4fe43Sopenharmony_ci            return osErrorResource;
5751bd4fe43Sopenharmony_ci
5761bd4fe43Sopenharmony_ci        default:
5771bd4fe43Sopenharmony_ci            return osOK;
5781bd4fe43Sopenharmony_ci    }
5791bd4fe43Sopenharmony_ci}
5801bd4fe43Sopenharmony_ci
5811bd4fe43Sopenharmony_ci
5821bd4fe43Sopenharmony_ciosStatus_t osThreadResume(osThreadId_t thread_id)
5831bd4fe43Sopenharmony_ci{
5841bd4fe43Sopenharmony_ci    UINT32 uwRet;
5851bd4fe43Sopenharmony_ci    LosTaskCB *pstTaskCB = NULL;
5861bd4fe43Sopenharmony_ci
5871bd4fe43Sopenharmony_ci    if (OS_INT_ACTIVE) {
5881bd4fe43Sopenharmony_ci        return osErrorISR;
5891bd4fe43Sopenharmony_ci    }
5901bd4fe43Sopenharmony_ci
5911bd4fe43Sopenharmony_ci    if (thread_id == NULL) {
5921bd4fe43Sopenharmony_ci        return osErrorParameter;
5931bd4fe43Sopenharmony_ci    }
5941bd4fe43Sopenharmony_ci
5951bd4fe43Sopenharmony_ci    pstTaskCB = (LosTaskCB *)thread_id;
5961bd4fe43Sopenharmony_ci    uwRet = LOS_TaskResume(pstTaskCB->taskID);
5971bd4fe43Sopenharmony_ci
5981bd4fe43Sopenharmony_ci    switch (uwRet) {
5991bd4fe43Sopenharmony_ci        case LOS_ERRNO_TSK_ID_INVALID:
6001bd4fe43Sopenharmony_ci            return osErrorParameter;
6011bd4fe43Sopenharmony_ci
6021bd4fe43Sopenharmony_ci        case LOS_ERRNO_TSK_NOT_CREATED:
6031bd4fe43Sopenharmony_ci        case LOS_ERRNO_TSK_NOT_SUSPENDED:
6041bd4fe43Sopenharmony_ci            return osErrorResource;
6051bd4fe43Sopenharmony_ci
6061bd4fe43Sopenharmony_ci        default:
6071bd4fe43Sopenharmony_ci            return osOK;
6081bd4fe43Sopenharmony_ci    }
6091bd4fe43Sopenharmony_ci}
6101bd4fe43Sopenharmony_ci
6111bd4fe43Sopenharmony_ci
6121bd4fe43Sopenharmony_ciosStatus_t osThreadTerminate(osThreadId_t thread_id)
6131bd4fe43Sopenharmony_ci{
6141bd4fe43Sopenharmony_ci    UINT32 uwRet;
6151bd4fe43Sopenharmony_ci    LosTaskCB *pstTaskCB = NULL;
6161bd4fe43Sopenharmony_ci
6171bd4fe43Sopenharmony_ci    if (OS_INT_ACTIVE) {
6181bd4fe43Sopenharmony_ci        return osErrorISR;
6191bd4fe43Sopenharmony_ci    }
6201bd4fe43Sopenharmony_ci
6211bd4fe43Sopenharmony_ci    if (thread_id == NULL) {
6221bd4fe43Sopenharmony_ci        return osErrorParameter;
6231bd4fe43Sopenharmony_ci    }
6241bd4fe43Sopenharmony_ci
6251bd4fe43Sopenharmony_ci    pstTaskCB = (LosTaskCB *)thread_id;
6261bd4fe43Sopenharmony_ci    uwRet = LOS_TaskDelete(pstTaskCB->taskID);
6271bd4fe43Sopenharmony_ci
6281bd4fe43Sopenharmony_ci    switch (uwRet) {
6291bd4fe43Sopenharmony_ci        case LOS_ERRNO_TSK_OPERATE_IDLE:
6301bd4fe43Sopenharmony_ci        case LOS_ERRNO_TSK_SUSPEND_SWTMR_NOT_ALLOWED:
6311bd4fe43Sopenharmony_ci        case LOS_ERRNO_TSK_ID_INVALID:
6321bd4fe43Sopenharmony_ci            return osErrorParameter;
6331bd4fe43Sopenharmony_ci
6341bd4fe43Sopenharmony_ci        case LOS_ERRNO_TSK_NOT_CREATED:
6351bd4fe43Sopenharmony_ci            return osErrorResource;
6361bd4fe43Sopenharmony_ci
6371bd4fe43Sopenharmony_ci        default:
6381bd4fe43Sopenharmony_ci            return osOK;
6391bd4fe43Sopenharmony_ci    }
6401bd4fe43Sopenharmony_ci}
6411bd4fe43Sopenharmony_ci
6421bd4fe43Sopenharmony_ci
6431bd4fe43Sopenharmony_ciuint32_t osThreadGetCount(void)
6441bd4fe43Sopenharmony_ci{
6451bd4fe43Sopenharmony_ci    uint32_t uwCount = 0;
6461bd4fe43Sopenharmony_ci
6471bd4fe43Sopenharmony_ci    if (OS_INT_ACTIVE) {
6481bd4fe43Sopenharmony_ci        return 0U;
6491bd4fe43Sopenharmony_ci    }
6501bd4fe43Sopenharmony_ci
6511bd4fe43Sopenharmony_ci    for (uint32_t index = 0; index <= LOSCFG_BASE_CORE_TSK_LIMIT; index++) {
6521bd4fe43Sopenharmony_ci        if (!((g_taskCBArray + index)->taskStatus & OS_TASK_STATUS_UNUSED)) {
6531bd4fe43Sopenharmony_ci            uwCount++;
6541bd4fe43Sopenharmony_ci        }
6551bd4fe43Sopenharmony_ci    }
6561bd4fe43Sopenharmony_ci
6571bd4fe43Sopenharmony_ci    return uwCount;
6581bd4fe43Sopenharmony_ci}
6591bd4fe43Sopenharmony_ci
6601bd4fe43Sopenharmony_ci
6611bd4fe43Sopenharmony_ci//  ==== Generic Wait Functions ====
6621bd4fe43Sopenharmony_ciWEAK UINT32 LOS_HalDelay(UINT32 ticks)
6631bd4fe43Sopenharmony_ci{
6641bd4fe43Sopenharmony_ci    UNUSED(ticks);
6651bd4fe43Sopenharmony_ci    return LOS_ERRNO_TSK_DELAY_IN_INT;
6661bd4fe43Sopenharmony_ci}
6671bd4fe43Sopenharmony_ci
6681bd4fe43Sopenharmony_ci
6691bd4fe43Sopenharmony_ciosStatus_t osDelay(uint32_t ticks)
6701bd4fe43Sopenharmony_ci{
6711bd4fe43Sopenharmony_ci    UINT32 uwRet;
6721bd4fe43Sopenharmony_ci    if (ticks == 0) {
6731bd4fe43Sopenharmony_ci        return osOK;
6741bd4fe43Sopenharmony_ci    }
6751bd4fe43Sopenharmony_ci    if (osKernelGetState() != osKernelRunning) {
6761bd4fe43Sopenharmony_ci        uwRet = LOS_HalDelay(ticks);
6771bd4fe43Sopenharmony_ci    } else {
6781bd4fe43Sopenharmony_ci        uwRet = LOS_TaskDelay(ticks);
6791bd4fe43Sopenharmony_ci    }
6801bd4fe43Sopenharmony_ci    if (uwRet == LOS_OK) {
6811bd4fe43Sopenharmony_ci        return osOK;
6821bd4fe43Sopenharmony_ci    } else {
6831bd4fe43Sopenharmony_ci        return osError;
6841bd4fe43Sopenharmony_ci    }
6851bd4fe43Sopenharmony_ci}
6861bd4fe43Sopenharmony_ci
6871bd4fe43Sopenharmony_ci
6881bd4fe43Sopenharmony_ciosStatus_t osDelayUntil(uint32_t ticks)
6891bd4fe43Sopenharmony_ci{
6901bd4fe43Sopenharmony_ci    UINT32 uwRet;
6911bd4fe43Sopenharmony_ci    UINT32 uwTicks;
6921bd4fe43Sopenharmony_ci    UINT32 tickCount = osKernelGetTickCount();
6931bd4fe43Sopenharmony_ci
6941bd4fe43Sopenharmony_ci    if (ticks < tickCount) {
6951bd4fe43Sopenharmony_ci        return osError;
6961bd4fe43Sopenharmony_ci    }
6971bd4fe43Sopenharmony_ci
6981bd4fe43Sopenharmony_ci    uwTicks = (UINT32)(ticks - tickCount);
6991bd4fe43Sopenharmony_ci
7001bd4fe43Sopenharmony_ci    uwRet = LOS_TaskDelay(uwTicks);
7011bd4fe43Sopenharmony_ci    if (uwRet == LOS_OK) {
7021bd4fe43Sopenharmony_ci        return osOK;
7031bd4fe43Sopenharmony_ci    } else {
7041bd4fe43Sopenharmony_ci        return osError;
7051bd4fe43Sopenharmony_ci    }
7061bd4fe43Sopenharmony_ci}
7071bd4fe43Sopenharmony_ci
7081bd4fe43Sopenharmony_ci//  ==== Timer Management Functions ====
7091bd4fe43Sopenharmony_ci#if (LOSCFG_BASE_CORE_SWTMR == 1)
7101bd4fe43Sopenharmony_ciosTimerId_t osTimerNew(osTimerFunc_t func, osTimerType_t type, void *argument, const osTimerAttr_t *attr)
7111bd4fe43Sopenharmony_ci{
7121bd4fe43Sopenharmony_ci    UNUSED(attr);
7131bd4fe43Sopenharmony_ci    UINT16 usSwTmrID;
7141bd4fe43Sopenharmony_ci    UINT8 mode;
7151bd4fe43Sopenharmony_ci
7161bd4fe43Sopenharmony_ci    if ((OS_INT_ACTIVE) || (NULL == func) || ((osTimerOnce != type) && (osTimerPeriodic != type))) {
7171bd4fe43Sopenharmony_ci        return (osTimerId_t)NULL;
7181bd4fe43Sopenharmony_ci    }
7191bd4fe43Sopenharmony_ci
7201bd4fe43Sopenharmony_ci    if (osTimerOnce == type) {
7211bd4fe43Sopenharmony_ci        mode = LOS_SWTMR_MODE_NO_SELFDELETE;
7221bd4fe43Sopenharmony_ci    } else {
7231bd4fe43Sopenharmony_ci        mode = LOS_SWTMR_MODE_PERIOD;
7241bd4fe43Sopenharmony_ci    }
7251bd4fe43Sopenharmony_ci#if (LOSCFG_BASE_CORE_SWTMR_ALIGN == 1)
7261bd4fe43Sopenharmony_ci    if (LOS_OK != LOS_SwtmrCreate(1, mode, (SWTMR_PROC_FUNC)func, &usSwTmrID, (UINT32)(UINTPTR)argument,
7271bd4fe43Sopenharmony_ci        osTimerRousesAllow, osTimerAlignIgnore)) {
7281bd4fe43Sopenharmony_ci        return (osTimerId_t)NULL;
7291bd4fe43Sopenharmony_ci    }
7301bd4fe43Sopenharmony_ci#else
7311bd4fe43Sopenharmony_ci    if (LOS_OK != LOS_SwtmrCreate(1, mode, (SWTMR_PROC_FUNC)func, &usSwTmrID, (UINT32)(UINTPTR)argument)) {
7321bd4fe43Sopenharmony_ci        return (osTimerId_t)NULL;
7331bd4fe43Sopenharmony_ci    }
7341bd4fe43Sopenharmony_ci#endif
7351bd4fe43Sopenharmony_ci
7361bd4fe43Sopenharmony_ci    return (osTimerId_t)OS_SWT_FROM_SID(usSwTmrID);
7371bd4fe43Sopenharmony_ci}
7381bd4fe43Sopenharmony_ci
7391bd4fe43Sopenharmony_ciosStatus_t osTimerStart(osTimerId_t timer_id, uint32_t ticks)
7401bd4fe43Sopenharmony_ci{
7411bd4fe43Sopenharmony_ci    UINT32 uwRet;
7421bd4fe43Sopenharmony_ci    SWTMR_CTRL_S *pstSwtmr;
7431bd4fe43Sopenharmony_ci
7441bd4fe43Sopenharmony_ci    if ((0 == ticks) || (NULL == timer_id)) {
7451bd4fe43Sopenharmony_ci        return osErrorParameter;
7461bd4fe43Sopenharmony_ci    }
7471bd4fe43Sopenharmony_ci
7481bd4fe43Sopenharmony_ci    pstSwtmr = (SWTMR_CTRL_S *)timer_id;
7491bd4fe43Sopenharmony_ci    pstSwtmr->uwInterval = ticks;
7501bd4fe43Sopenharmony_ci    uwRet = LOS_SwtmrStart(pstSwtmr->usTimerID);
7511bd4fe43Sopenharmony_ci    if (LOS_OK == uwRet) {
7521bd4fe43Sopenharmony_ci        return osOK;
7531bd4fe43Sopenharmony_ci    } else if (LOS_ERRNO_SWTMR_ID_INVALID == uwRet) {
7541bd4fe43Sopenharmony_ci        return osErrorParameter;
7551bd4fe43Sopenharmony_ci    } else {
7561bd4fe43Sopenharmony_ci        return osErrorResource;
7571bd4fe43Sopenharmony_ci    }
7581bd4fe43Sopenharmony_ci}
7591bd4fe43Sopenharmony_ci
7601bd4fe43Sopenharmony_ci
7611bd4fe43Sopenharmony_ciconst char *osTimerGetName(osTimerId_t timer_id)
7621bd4fe43Sopenharmony_ci{
7631bd4fe43Sopenharmony_ci    UNUSED(timer_id);
7641bd4fe43Sopenharmony_ci    return (const char *)NULL;
7651bd4fe43Sopenharmony_ci}
7661bd4fe43Sopenharmony_ci
7671bd4fe43Sopenharmony_ci
7681bd4fe43Sopenharmony_ciosStatus_t osTimerStop(osTimerId_t timer_id)
7691bd4fe43Sopenharmony_ci{
7701bd4fe43Sopenharmony_ci    UINT32 uwRet;
7711bd4fe43Sopenharmony_ci    SWTMR_CTRL_S *pstSwtmr = (SWTMR_CTRL_S *)timer_id;
7721bd4fe43Sopenharmony_ci
7731bd4fe43Sopenharmony_ci    if (OS_INT_ACTIVE) {
7741bd4fe43Sopenharmony_ci        return osErrorISR;
7751bd4fe43Sopenharmony_ci    }
7761bd4fe43Sopenharmony_ci
7771bd4fe43Sopenharmony_ci    if (NULL == pstSwtmr) {
7781bd4fe43Sopenharmony_ci        return osErrorParameter;
7791bd4fe43Sopenharmony_ci    }
7801bd4fe43Sopenharmony_ci
7811bd4fe43Sopenharmony_ci    uwRet = LOS_SwtmrStop(pstSwtmr->usTimerID);
7821bd4fe43Sopenharmony_ci    if (LOS_OK == uwRet) {
7831bd4fe43Sopenharmony_ci        return osOK;
7841bd4fe43Sopenharmony_ci    } else if (LOS_ERRNO_SWTMR_ID_INVALID == uwRet) {
7851bd4fe43Sopenharmony_ci        return osErrorParameter;
7861bd4fe43Sopenharmony_ci    } else {
7871bd4fe43Sopenharmony_ci        return osErrorResource;
7881bd4fe43Sopenharmony_ci    }
7891bd4fe43Sopenharmony_ci}
7901bd4fe43Sopenharmony_ci
7911bd4fe43Sopenharmony_ci
7921bd4fe43Sopenharmony_ciuint32_t osTimerIsRunning(osTimerId_t timer_id)
7931bd4fe43Sopenharmony_ci{
7941bd4fe43Sopenharmony_ci    if ((OS_INT_ACTIVE) || (NULL == timer_id)) {
7951bd4fe43Sopenharmony_ci        return 0;
7961bd4fe43Sopenharmony_ci    }
7971bd4fe43Sopenharmony_ci
7981bd4fe43Sopenharmony_ci    return (OS_SWTMR_STATUS_TICKING == ((SWTMR_CTRL_S *)timer_id)->ucState);
7991bd4fe43Sopenharmony_ci}
8001bd4fe43Sopenharmony_ci
8011bd4fe43Sopenharmony_ci
8021bd4fe43Sopenharmony_ciosStatus_t osTimerDelete(osTimerId_t timer_id)
8031bd4fe43Sopenharmony_ci{
8041bd4fe43Sopenharmony_ci    UINT32 uwRet;
8051bd4fe43Sopenharmony_ci    SWTMR_CTRL_S *pstSwtmr = (SWTMR_CTRL_S *)timer_id;
8061bd4fe43Sopenharmony_ci
8071bd4fe43Sopenharmony_ci    if (OS_INT_ACTIVE) {
8081bd4fe43Sopenharmony_ci        return osErrorISR;
8091bd4fe43Sopenharmony_ci    }
8101bd4fe43Sopenharmony_ci
8111bd4fe43Sopenharmony_ci    if (NULL == pstSwtmr) {
8121bd4fe43Sopenharmony_ci        return osErrorParameter;
8131bd4fe43Sopenharmony_ci    }
8141bd4fe43Sopenharmony_ci
8151bd4fe43Sopenharmony_ci    uwRet = LOS_SwtmrDelete(pstSwtmr->usTimerID);
8161bd4fe43Sopenharmony_ci    if (LOS_OK == uwRet) {
8171bd4fe43Sopenharmony_ci        return osOK;
8181bd4fe43Sopenharmony_ci    } else if (LOS_ERRNO_SWTMR_ID_INVALID == uwRet) {
8191bd4fe43Sopenharmony_ci        return osErrorParameter;
8201bd4fe43Sopenharmony_ci    } else {
8211bd4fe43Sopenharmony_ci        return osErrorResource;
8221bd4fe43Sopenharmony_ci    }
8231bd4fe43Sopenharmony_ci}
8241bd4fe43Sopenharmony_ci#endif
8251bd4fe43Sopenharmony_ci
8261bd4fe43Sopenharmony_ciosEventFlagsId_t osEventFlagsNew(const osEventFlagsAttr_t *attr)
8271bd4fe43Sopenharmony_ci{
8281bd4fe43Sopenharmony_ci    PEVENT_CB_S pstEventCB;
8291bd4fe43Sopenharmony_ci    UINT32 uwRet;
8301bd4fe43Sopenharmony_ci
8311bd4fe43Sopenharmony_ci    UNUSED(attr);
8321bd4fe43Sopenharmony_ci
8331bd4fe43Sopenharmony_ci    if (OS_INT_ACTIVE) {
8341bd4fe43Sopenharmony_ci        return (osEventFlagsId_t)NULL;
8351bd4fe43Sopenharmony_ci    }
8361bd4fe43Sopenharmony_ci
8371bd4fe43Sopenharmony_ci    pstEventCB = (PEVENT_CB_S)LOS_MemAlloc(m_aucSysMem0, sizeof(EVENT_CB_S));
8381bd4fe43Sopenharmony_ci    if (pstEventCB == NULL) {
8391bd4fe43Sopenharmony_ci        return (osEventFlagsId_t)NULL;
8401bd4fe43Sopenharmony_ci    }
8411bd4fe43Sopenharmony_ci
8421bd4fe43Sopenharmony_ci    uwRet = LOS_EventInit(pstEventCB);
8431bd4fe43Sopenharmony_ci    if (uwRet == LOS_ERRNO_EVENT_PTR_NULL) {
8441bd4fe43Sopenharmony_ci        return (osEventFlagsId_t)NULL;
8451bd4fe43Sopenharmony_ci    } else {
8461bd4fe43Sopenharmony_ci        return (osEventFlagsId_t)pstEventCB;
8471bd4fe43Sopenharmony_ci    }
8481bd4fe43Sopenharmony_ci}
8491bd4fe43Sopenharmony_ci
8501bd4fe43Sopenharmony_ci
8511bd4fe43Sopenharmony_ciconst char *osEventFlagsGetName(osEventFlagsId_t ef_id)
8521bd4fe43Sopenharmony_ci{
8531bd4fe43Sopenharmony_ci    UNUSED(ef_id);
8541bd4fe43Sopenharmony_ci
8551bd4fe43Sopenharmony_ci    if (OS_INT_ACTIVE) {
8561bd4fe43Sopenharmony_ci        return (const char *)NULL;
8571bd4fe43Sopenharmony_ci    }
8581bd4fe43Sopenharmony_ci
8591bd4fe43Sopenharmony_ci    return (const char *)NULL;
8601bd4fe43Sopenharmony_ci}
8611bd4fe43Sopenharmony_ci
8621bd4fe43Sopenharmony_ci
8631bd4fe43Sopenharmony_ciuint32_t osEventFlagsSet(osEventFlagsId_t ef_id, uint32_t flags)
8641bd4fe43Sopenharmony_ci{
8651bd4fe43Sopenharmony_ci    PEVENT_CB_S pstEventCB = (PEVENT_CB_S)ef_id;
8661bd4fe43Sopenharmony_ci    UINT32 uwRet;
8671bd4fe43Sopenharmony_ci    uint32_t rflags;
8681bd4fe43Sopenharmony_ci    if (pstEventCB == NULL) {
8691bd4fe43Sopenharmony_ci        return osFlagsErrorParameter;
8701bd4fe43Sopenharmony_ci    }
8711bd4fe43Sopenharmony_ci    uwRet = LOS_EventWrite(pstEventCB, (UINT32)flags);
8721bd4fe43Sopenharmony_ci    if (uwRet != LOS_OK) {
8731bd4fe43Sopenharmony_ci        return (uint32_t)osFlagsErrorParameter;
8741bd4fe43Sopenharmony_ci    } else {
8751bd4fe43Sopenharmony_ci        rflags = pstEventCB->uwEventID;
8761bd4fe43Sopenharmony_ci        return rflags;
8771bd4fe43Sopenharmony_ci    }
8781bd4fe43Sopenharmony_ci}
8791bd4fe43Sopenharmony_ci
8801bd4fe43Sopenharmony_ci
8811bd4fe43Sopenharmony_ciuint32_t osEventFlagsClear(osEventFlagsId_t ef_id, uint32_t flags)
8821bd4fe43Sopenharmony_ci{
8831bd4fe43Sopenharmony_ci    PEVENT_CB_S pstEventCB = (PEVENT_CB_S)ef_id;
8841bd4fe43Sopenharmony_ci    UINTPTR uwIntSave;
8851bd4fe43Sopenharmony_ci    uint32_t rflags;
8861bd4fe43Sopenharmony_ci    UINT32 uwRet;
8871bd4fe43Sopenharmony_ci
8881bd4fe43Sopenharmony_ci    if (pstEventCB == NULL) {
8891bd4fe43Sopenharmony_ci        return (uint32_t)osFlagsErrorParameter;
8901bd4fe43Sopenharmony_ci    }
8911bd4fe43Sopenharmony_ci
8921bd4fe43Sopenharmony_ci    uwIntSave = LOS_IntLock();
8931bd4fe43Sopenharmony_ci    rflags = pstEventCB->uwEventID;
8941bd4fe43Sopenharmony_ci
8951bd4fe43Sopenharmony_ci    uwRet = LOS_EventClear(pstEventCB, ~flags);
8961bd4fe43Sopenharmony_ci    LOS_IntRestore(uwIntSave);
8971bd4fe43Sopenharmony_ci    if (uwRet != LOS_OK) {
8981bd4fe43Sopenharmony_ci        return (uint32_t)osFlagsErrorParameter;
8991bd4fe43Sopenharmony_ci    } else {
9001bd4fe43Sopenharmony_ci        return rflags;
9011bd4fe43Sopenharmony_ci    }
9021bd4fe43Sopenharmony_ci}
9031bd4fe43Sopenharmony_ci
9041bd4fe43Sopenharmony_ci
9051bd4fe43Sopenharmony_ciuint32_t osEventFlagsGet(osEventFlagsId_t ef_id)
9061bd4fe43Sopenharmony_ci{
9071bd4fe43Sopenharmony_ci    PEVENT_CB_S pstEventCB = (PEVENT_CB_S)ef_id;
9081bd4fe43Sopenharmony_ci    UINTPTR uwIntSave;
9091bd4fe43Sopenharmony_ci    uint32_t rflags;
9101bd4fe43Sopenharmony_ci
9111bd4fe43Sopenharmony_ci    if (pstEventCB == NULL) {
9121bd4fe43Sopenharmony_ci        return (uint32_t)osFlagsErrorParameter;
9131bd4fe43Sopenharmony_ci    }
9141bd4fe43Sopenharmony_ci
9151bd4fe43Sopenharmony_ci    uwIntSave = LOS_IntLock();
9161bd4fe43Sopenharmony_ci    rflags = pstEventCB->uwEventID;
9171bd4fe43Sopenharmony_ci    LOS_IntRestore(uwIntSave);
9181bd4fe43Sopenharmony_ci
9191bd4fe43Sopenharmony_ci    return rflags;
9201bd4fe43Sopenharmony_ci}
9211bd4fe43Sopenharmony_ci
9221bd4fe43Sopenharmony_ciuint32_t osEventFlagsWait(osEventFlagsId_t ef_id, uint32_t flags, uint32_t options, uint32_t timeout)
9231bd4fe43Sopenharmony_ci{
9241bd4fe43Sopenharmony_ci    PEVENT_CB_S pstEventCB = (PEVENT_CB_S)ef_id;
9251bd4fe43Sopenharmony_ci    UINT32 uwMode = 0;
9261bd4fe43Sopenharmony_ci    UINT32 uwRet;
9271bd4fe43Sopenharmony_ci    uint32_t rflags;
9281bd4fe43Sopenharmony_ci
9291bd4fe43Sopenharmony_ci    if (options > (osFlagsWaitAny | osFlagsWaitAll | osFlagsNoClear)) {
9301bd4fe43Sopenharmony_ci        return (uint32_t)osFlagsErrorParameter;
9311bd4fe43Sopenharmony_ci    }
9321bd4fe43Sopenharmony_ci
9331bd4fe43Sopenharmony_ci    if ((options & osFlagsWaitAll) == osFlagsWaitAll) {
9341bd4fe43Sopenharmony_ci        uwMode |= LOS_WAITMODE_AND;
9351bd4fe43Sopenharmony_ci    } else {
9361bd4fe43Sopenharmony_ci        uwMode |= LOS_WAITMODE_OR;
9371bd4fe43Sopenharmony_ci    }
9381bd4fe43Sopenharmony_ci
9391bd4fe43Sopenharmony_ci    if ((options & osFlagsNoClear) == osFlagsNoClear) {
9401bd4fe43Sopenharmony_ci        uwMode &= ~LOS_WAITMODE_CLR;
9411bd4fe43Sopenharmony_ci    } else {
9421bd4fe43Sopenharmony_ci        uwMode |= LOS_WAITMODE_CLR;
9431bd4fe43Sopenharmony_ci    }
9441bd4fe43Sopenharmony_ci
9451bd4fe43Sopenharmony_ci    uwRet = LOS_EventRead(pstEventCB, (UINT32)flags, uwMode, (UINT32)timeout);
9461bd4fe43Sopenharmony_ci    switch (uwRet) {
9471bd4fe43Sopenharmony_ci        case LOS_ERRNO_EVENT_PTR_NULL:
9481bd4fe43Sopenharmony_ci        case LOS_ERRNO_EVENT_EVENTMASK_INVALID:
9491bd4fe43Sopenharmony_ci        case LOS_ERRNO_EVENT_SETBIT_INVALID:
9501bd4fe43Sopenharmony_ci            return (uint32_t)osFlagsErrorParameter;
9511bd4fe43Sopenharmony_ci
9521bd4fe43Sopenharmony_ci        case LOS_ERRNO_EVENT_READ_IN_INTERRUPT:
9531bd4fe43Sopenharmony_ci        case LOS_ERRNO_EVENT_FLAGS_INVALID:
9541bd4fe43Sopenharmony_ci        case LOS_ERRNO_EVENT_READ_IN_LOCK:
9551bd4fe43Sopenharmony_ci            return (uint32_t)osFlagsErrorResource;
9561bd4fe43Sopenharmony_ci
9571bd4fe43Sopenharmony_ci        case LOS_ERRNO_EVENT_READ_TIMEOUT:
9581bd4fe43Sopenharmony_ci            return (uint32_t)osFlagsErrorTimeout;
9591bd4fe43Sopenharmony_ci
9601bd4fe43Sopenharmony_ci        default:
9611bd4fe43Sopenharmony_ci            rflags = (uint32_t)uwRet;
9621bd4fe43Sopenharmony_ci            return rflags;
9631bd4fe43Sopenharmony_ci    }
9641bd4fe43Sopenharmony_ci}
9651bd4fe43Sopenharmony_ci
9661bd4fe43Sopenharmony_ciosStatus_t osEventFlagsDelete(osEventFlagsId_t ef_id)
9671bd4fe43Sopenharmony_ci{
9681bd4fe43Sopenharmony_ci    PEVENT_CB_S pstEventCB = (PEVENT_CB_S)ef_id;
9691bd4fe43Sopenharmony_ci    UINTPTR uwIntSave;
9701bd4fe43Sopenharmony_ci    osStatus_t uwRet;
9711bd4fe43Sopenharmony_ci
9721bd4fe43Sopenharmony_ci    uwIntSave = LOS_IntLock();
9731bd4fe43Sopenharmony_ci    if (LOS_EventDestroy(pstEventCB) == LOS_OK) {
9741bd4fe43Sopenharmony_ci        uwRet = osOK;
9751bd4fe43Sopenharmony_ci    } else {
9761bd4fe43Sopenharmony_ci        uwRet = osErrorParameter;
9771bd4fe43Sopenharmony_ci    }
9781bd4fe43Sopenharmony_ci    LOS_IntRestore(uwIntSave);
9791bd4fe43Sopenharmony_ci
9801bd4fe43Sopenharmony_ci    if (LOS_MemFree(m_aucSysMem0, (void *)pstEventCB) == LOS_OK) {
9811bd4fe43Sopenharmony_ci        uwRet = osOK;
9821bd4fe43Sopenharmony_ci    } else {
9831bd4fe43Sopenharmony_ci        uwRet = osErrorParameter;
9841bd4fe43Sopenharmony_ci    }
9851bd4fe43Sopenharmony_ci
9861bd4fe43Sopenharmony_ci    return uwRet;
9871bd4fe43Sopenharmony_ci}
9881bd4fe43Sopenharmony_ci
9891bd4fe43Sopenharmony_ci//  ==== Mutex Management Functions ====
9901bd4fe43Sopenharmony_ci#if (LOSCFG_BASE_IPC_MUX == 1)
9911bd4fe43Sopenharmony_ciosMutexId_t osMutexNew(const osMutexAttr_t *attr)
9921bd4fe43Sopenharmony_ci{
9931bd4fe43Sopenharmony_ci    UINT32 uwRet;
9941bd4fe43Sopenharmony_ci    UINT32 uwMuxId;
9951bd4fe43Sopenharmony_ci
9961bd4fe43Sopenharmony_ci    UNUSED(attr);
9971bd4fe43Sopenharmony_ci
9981bd4fe43Sopenharmony_ci    if (OS_INT_ACTIVE) {
9991bd4fe43Sopenharmony_ci        return NULL;
10001bd4fe43Sopenharmony_ci    }
10011bd4fe43Sopenharmony_ci
10021bd4fe43Sopenharmony_ci    uwRet = LOS_MuxCreate(&uwMuxId);
10031bd4fe43Sopenharmony_ci    if (uwRet == LOS_OK) {
10041bd4fe43Sopenharmony_ci        return (osMutexId_t)(GET_MUX(uwMuxId));
10051bd4fe43Sopenharmony_ci    } else {
10061bd4fe43Sopenharmony_ci        return (osMutexId_t)NULL;
10071bd4fe43Sopenharmony_ci    }
10081bd4fe43Sopenharmony_ci}
10091bd4fe43Sopenharmony_ci
10101bd4fe43Sopenharmony_ci
10111bd4fe43Sopenharmony_ciosStatus_t osMutexAcquire(osMutexId_t mutex_id, uint32_t timeout)
10121bd4fe43Sopenharmony_ci{
10131bd4fe43Sopenharmony_ci    UINT32 uwRet;
10141bd4fe43Sopenharmony_ci
10151bd4fe43Sopenharmony_ci    if (mutex_id == NULL) {
10161bd4fe43Sopenharmony_ci        return osErrorParameter;
10171bd4fe43Sopenharmony_ci    }
10181bd4fe43Sopenharmony_ci
10191bd4fe43Sopenharmony_ci    if (OS_INT_ACTIVE && (timeout != LOS_NO_WAIT)) {
10201bd4fe43Sopenharmony_ci        timeout = 0;
10211bd4fe43Sopenharmony_ci    }
10221bd4fe43Sopenharmony_ci
10231bd4fe43Sopenharmony_ci    uwRet = LOS_MuxPend(((LosMuxCB *)mutex_id)->muxID, timeout);
10241bd4fe43Sopenharmony_ci    if (uwRet == LOS_OK) {
10251bd4fe43Sopenharmony_ci        return osOK;
10261bd4fe43Sopenharmony_ci    } else if (uwRet == LOS_ERRNO_MUX_TIMEOUT) {
10271bd4fe43Sopenharmony_ci        return osErrorTimeout;
10281bd4fe43Sopenharmony_ci    } else if (uwRet == LOS_ERRNO_MUX_INVALID) {
10291bd4fe43Sopenharmony_ci        return osErrorParameter;
10301bd4fe43Sopenharmony_ci    } else {
10311bd4fe43Sopenharmony_ci        return osErrorResource;
10321bd4fe43Sopenharmony_ci    }
10331bd4fe43Sopenharmony_ci}
10341bd4fe43Sopenharmony_ci
10351bd4fe43Sopenharmony_ci
10361bd4fe43Sopenharmony_ciosStatus_t osMutexRelease(osMutexId_t mutex_id)
10371bd4fe43Sopenharmony_ci{
10381bd4fe43Sopenharmony_ci    UINT32 uwRet;
10391bd4fe43Sopenharmony_ci
10401bd4fe43Sopenharmony_ci    if (mutex_id == NULL) {
10411bd4fe43Sopenharmony_ci        return osErrorParameter;
10421bd4fe43Sopenharmony_ci    }
10431bd4fe43Sopenharmony_ci
10441bd4fe43Sopenharmony_ci    uwRet = LOS_MuxPost(((LosMuxCB *)mutex_id)->muxID);
10451bd4fe43Sopenharmony_ci    if (uwRet == LOS_OK) {
10461bd4fe43Sopenharmony_ci        return osOK;
10471bd4fe43Sopenharmony_ci    } else {
10481bd4fe43Sopenharmony_ci        return osErrorResource;
10491bd4fe43Sopenharmony_ci    }
10501bd4fe43Sopenharmony_ci}
10511bd4fe43Sopenharmony_ci
10521bd4fe43Sopenharmony_ci
10531bd4fe43Sopenharmony_ciosThreadId_t osMutexGetOwner(osMutexId_t mutex_id)
10541bd4fe43Sopenharmony_ci{
10551bd4fe43Sopenharmony_ci    UINT32 uwIntSave;
10561bd4fe43Sopenharmony_ci    LosTaskCB *pstTaskCB;
10571bd4fe43Sopenharmony_ci
10581bd4fe43Sopenharmony_ci    if (OS_INT_ACTIVE) {
10591bd4fe43Sopenharmony_ci        return NULL;
10601bd4fe43Sopenharmony_ci    }
10611bd4fe43Sopenharmony_ci
10621bd4fe43Sopenharmony_ci    if (mutex_id == NULL) {
10631bd4fe43Sopenharmony_ci        return NULL;
10641bd4fe43Sopenharmony_ci    }
10651bd4fe43Sopenharmony_ci
10661bd4fe43Sopenharmony_ci    uwIntSave = LOS_IntLock();
10671bd4fe43Sopenharmony_ci    pstTaskCB = ((LosMuxCB *)mutex_id)->owner;
10681bd4fe43Sopenharmony_ci    LOS_IntRestore(uwIntSave);
10691bd4fe43Sopenharmony_ci
10701bd4fe43Sopenharmony_ci    return (osThreadId_t)pstTaskCB;
10711bd4fe43Sopenharmony_ci}
10721bd4fe43Sopenharmony_ci
10731bd4fe43Sopenharmony_ci
10741bd4fe43Sopenharmony_ciosStatus_t osMutexDelete(osMutexId_t mutex_id)
10751bd4fe43Sopenharmony_ci{
10761bd4fe43Sopenharmony_ci    UINT32 uwRet;
10771bd4fe43Sopenharmony_ci
10781bd4fe43Sopenharmony_ci    if (OS_INT_ACTIVE) {
10791bd4fe43Sopenharmony_ci        return osErrorISR;
10801bd4fe43Sopenharmony_ci    }
10811bd4fe43Sopenharmony_ci
10821bd4fe43Sopenharmony_ci    if (mutex_id == NULL) {
10831bd4fe43Sopenharmony_ci        return osErrorParameter;
10841bd4fe43Sopenharmony_ci    }
10851bd4fe43Sopenharmony_ci
10861bd4fe43Sopenharmony_ci    uwRet = LOS_MuxDelete(((LosMuxCB *)mutex_id)->muxID);
10871bd4fe43Sopenharmony_ci    if (uwRet == LOS_OK) {
10881bd4fe43Sopenharmony_ci        return osOK;
10891bd4fe43Sopenharmony_ci    } else if (uwRet == LOS_ERRNO_MUX_INVALID) {
10901bd4fe43Sopenharmony_ci        return osErrorParameter;
10911bd4fe43Sopenharmony_ci    } else {
10921bd4fe43Sopenharmony_ci        return osErrorResource;
10931bd4fe43Sopenharmony_ci    }
10941bd4fe43Sopenharmony_ci}
10951bd4fe43Sopenharmony_ci#endif
10961bd4fe43Sopenharmony_ci
10971bd4fe43Sopenharmony_ci//  ==== Semaphore Management Functions ====
10981bd4fe43Sopenharmony_ci#if (LOSCFG_BASE_IPC_SEM == 1)
10991bd4fe43Sopenharmony_ci
11001bd4fe43Sopenharmony_ciosSemaphoreId_t osSemaphoreNew(uint32_t max_count, uint32_t initial_count, const osSemaphoreAttr_t *attr)
11011bd4fe43Sopenharmony_ci{
11021bd4fe43Sopenharmony_ci    UINT32 uwRet;
11031bd4fe43Sopenharmony_ci    UINT32 uwSemId;
11041bd4fe43Sopenharmony_ci
11051bd4fe43Sopenharmony_ci    UNUSED(attr);
11061bd4fe43Sopenharmony_ci
11071bd4fe43Sopenharmony_ci    if (OS_INT_ACTIVE) {
11081bd4fe43Sopenharmony_ci        return (osSemaphoreId_t)NULL;
11091bd4fe43Sopenharmony_ci    }
11101bd4fe43Sopenharmony_ci
11111bd4fe43Sopenharmony_ci    if (1 == max_count) {
11121bd4fe43Sopenharmony_ci        uwRet = LOS_BinarySemCreate((UINT16)initial_count, &uwSemId);
11131bd4fe43Sopenharmony_ci    } else {
11141bd4fe43Sopenharmony_ci        uwRet = LOS_SemCreate((UINT16)initial_count, &uwSemId);
11151bd4fe43Sopenharmony_ci    }
11161bd4fe43Sopenharmony_ci
11171bd4fe43Sopenharmony_ci    if (uwRet == LOS_OK) {
11181bd4fe43Sopenharmony_ci        return (osSemaphoreId_t)(GET_SEM(uwSemId));
11191bd4fe43Sopenharmony_ci    } else {
11201bd4fe43Sopenharmony_ci        return (osSemaphoreId_t)NULL;
11211bd4fe43Sopenharmony_ci    }
11221bd4fe43Sopenharmony_ci}
11231bd4fe43Sopenharmony_ci
11241bd4fe43Sopenharmony_ci
11251bd4fe43Sopenharmony_ciosStatus_t osSemaphoreAcquire(osSemaphoreId_t semaphore_id, uint32_t timeout)
11261bd4fe43Sopenharmony_ci{
11271bd4fe43Sopenharmony_ci    UINT32 uwRet;
11281bd4fe43Sopenharmony_ci
11291bd4fe43Sopenharmony_ci    if (semaphore_id == NULL) {
11301bd4fe43Sopenharmony_ci        return osErrorParameter;
11311bd4fe43Sopenharmony_ci    }
11321bd4fe43Sopenharmony_ci
11331bd4fe43Sopenharmony_ci    if (OS_INT_ACTIVE && (timeout != LOS_NO_WAIT)) {
11341bd4fe43Sopenharmony_ci        return osErrorISR;
11351bd4fe43Sopenharmony_ci    }
11361bd4fe43Sopenharmony_ci
11371bd4fe43Sopenharmony_ci    uwRet = LOS_SemPend(((LosSemCB *)semaphore_id)->semID, timeout);
11381bd4fe43Sopenharmony_ci    if (uwRet == LOS_OK) {
11391bd4fe43Sopenharmony_ci        return osOK;
11401bd4fe43Sopenharmony_ci    } else if (uwRet == LOS_ERRNO_SEM_TIMEOUT) {
11411bd4fe43Sopenharmony_ci        return osErrorTimeout;
11421bd4fe43Sopenharmony_ci    } else if (uwRet == LOS_ERRNO_SEM_INVALID) {
11431bd4fe43Sopenharmony_ci        return osErrorParameter;
11441bd4fe43Sopenharmony_ci    } else if (uwRet == LOS_ERRNO_SEM_PEND_INTERR) {
11451bd4fe43Sopenharmony_ci        return osErrorISR;
11461bd4fe43Sopenharmony_ci    } else {
11471bd4fe43Sopenharmony_ci        return osErrorResource;
11481bd4fe43Sopenharmony_ci    }
11491bd4fe43Sopenharmony_ci}
11501bd4fe43Sopenharmony_ci
11511bd4fe43Sopenharmony_ci
11521bd4fe43Sopenharmony_ciosStatus_t osSemaphoreRelease(osSemaphoreId_t semaphore_id)
11531bd4fe43Sopenharmony_ci{
11541bd4fe43Sopenharmony_ci    UINT32 uwRet;
11551bd4fe43Sopenharmony_ci
11561bd4fe43Sopenharmony_ci    if (semaphore_id == NULL) {
11571bd4fe43Sopenharmony_ci        return osErrorParameter;
11581bd4fe43Sopenharmony_ci    }
11591bd4fe43Sopenharmony_ci
11601bd4fe43Sopenharmony_ci    uwRet = LOS_SemPost(((LosSemCB *)semaphore_id)->semID);
11611bd4fe43Sopenharmony_ci    if (uwRet == LOS_OK) {
11621bd4fe43Sopenharmony_ci        return osOK;
11631bd4fe43Sopenharmony_ci    } else if (uwRet == LOS_ERRNO_SEM_INVALID) {
11641bd4fe43Sopenharmony_ci        return osErrorParameter;
11651bd4fe43Sopenharmony_ci    } else {
11661bd4fe43Sopenharmony_ci        return osErrorResource;
11671bd4fe43Sopenharmony_ci    }
11681bd4fe43Sopenharmony_ci}
11691bd4fe43Sopenharmony_ci
11701bd4fe43Sopenharmony_ci
11711bd4fe43Sopenharmony_ciuint32_t osSemaphoreGetCount(osSemaphoreId_t semaphore_id)
11721bd4fe43Sopenharmony_ci{
11731bd4fe43Sopenharmony_ci    UINT32 uwIntSave;
11741bd4fe43Sopenharmony_ci    UINT32 uwCount;
11751bd4fe43Sopenharmony_ci
11761bd4fe43Sopenharmony_ci    if (OS_INT_ACTIVE) {
11771bd4fe43Sopenharmony_ci        return 0;
11781bd4fe43Sopenharmony_ci    }
11791bd4fe43Sopenharmony_ci
11801bd4fe43Sopenharmony_ci    if (semaphore_id == NULL) {
11811bd4fe43Sopenharmony_ci        return 0;
11821bd4fe43Sopenharmony_ci    }
11831bd4fe43Sopenharmony_ci
11841bd4fe43Sopenharmony_ci    uwIntSave = LOS_IntLock();
11851bd4fe43Sopenharmony_ci    uwCount = ((LosSemCB *)semaphore_id)->semCount;
11861bd4fe43Sopenharmony_ci    LOS_IntRestore(uwIntSave);
11871bd4fe43Sopenharmony_ci
11881bd4fe43Sopenharmony_ci    return uwCount;
11891bd4fe43Sopenharmony_ci}
11901bd4fe43Sopenharmony_ci
11911bd4fe43Sopenharmony_ci
11921bd4fe43Sopenharmony_ciosStatus_t osSemaphoreDelete(osSemaphoreId_t semaphore_id)
11931bd4fe43Sopenharmony_ci{
11941bd4fe43Sopenharmony_ci    UINT32 uwRet;
11951bd4fe43Sopenharmony_ci
11961bd4fe43Sopenharmony_ci    if (OS_INT_ACTIVE) {
11971bd4fe43Sopenharmony_ci        return osErrorISR;
11981bd4fe43Sopenharmony_ci    }
11991bd4fe43Sopenharmony_ci
12001bd4fe43Sopenharmony_ci    if (semaphore_id == NULL) {
12011bd4fe43Sopenharmony_ci        return osErrorParameter;
12021bd4fe43Sopenharmony_ci    }
12031bd4fe43Sopenharmony_ci
12041bd4fe43Sopenharmony_ci    uwRet = LOS_SemDelete(((LosSemCB *)semaphore_id)->semID);
12051bd4fe43Sopenharmony_ci    if (uwRet == LOS_OK) {
12061bd4fe43Sopenharmony_ci        return osOK;
12071bd4fe43Sopenharmony_ci    } else if (uwRet == LOS_ERRNO_SEM_INVALID) {
12081bd4fe43Sopenharmony_ci        return osErrorParameter;
12091bd4fe43Sopenharmony_ci    } else {
12101bd4fe43Sopenharmony_ci        return osErrorResource;
12111bd4fe43Sopenharmony_ci    }
12121bd4fe43Sopenharmony_ci}
12131bd4fe43Sopenharmony_ci#endif
12141bd4fe43Sopenharmony_ci
12151bd4fe43Sopenharmony_ci
12161bd4fe43Sopenharmony_ci//  ==== Message Queue Management Functions ====
12171bd4fe43Sopenharmony_ci#if (LOSCFG_BASE_IPC_QUEUE == 1)
12181bd4fe43Sopenharmony_ciosMessageQueueId_t osMessageQueueNew(uint32_t msg_count, uint32_t msg_size, const osMessageQueueAttr_t *attr)
12191bd4fe43Sopenharmony_ci{
12201bd4fe43Sopenharmony_ci    UINT32 uwQueueID;
12211bd4fe43Sopenharmony_ci    UINT32 uwRet;
12221bd4fe43Sopenharmony_ci    UNUSED(attr);
12231bd4fe43Sopenharmony_ci    osMessageQueueId_t handle;
12241bd4fe43Sopenharmony_ci
12251bd4fe43Sopenharmony_ci    if (0 == msg_count || 0 == msg_size || OS_INT_ACTIVE) {
12261bd4fe43Sopenharmony_ci        return (osMessageQueueId_t)NULL;
12271bd4fe43Sopenharmony_ci    }
12281bd4fe43Sopenharmony_ci
12291bd4fe43Sopenharmony_ci    uwRet = LOS_QueueCreate((char *)NULL, (UINT16)msg_count, &uwQueueID, 0, (UINT16)msg_size);
12301bd4fe43Sopenharmony_ci    if (uwRet == LOS_OK) {
12311bd4fe43Sopenharmony_ci        handle = (osMessageQueueId_t)(GET_QUEUE_HANDLE(uwQueueID));
12321bd4fe43Sopenharmony_ci    } else {
12331bd4fe43Sopenharmony_ci        handle = (osMessageQueueId_t)NULL;
12341bd4fe43Sopenharmony_ci    }
12351bd4fe43Sopenharmony_ci
12361bd4fe43Sopenharmony_ci    return handle;
12371bd4fe43Sopenharmony_ci}
12381bd4fe43Sopenharmony_ci
12391bd4fe43Sopenharmony_ci
12401bd4fe43Sopenharmony_ciosStatus_t osMessageQueuePut(osMessageQueueId_t mq_id, const void *msg_ptr, uint8_t msg_prio, uint32_t timeout)
12411bd4fe43Sopenharmony_ci{
12421bd4fe43Sopenharmony_ci    UNUSED(msg_prio);
12431bd4fe43Sopenharmony_ci    UINT32 uwRet;
12441bd4fe43Sopenharmony_ci    UINT32 uwBufferSize;
12451bd4fe43Sopenharmony_ci    LosQueueCB *pstQueue = (LosQueueCB *)mq_id;
12461bd4fe43Sopenharmony_ci
12471bd4fe43Sopenharmony_ci    if (pstQueue == NULL || msg_ptr == NULL || ((OS_INT_ACTIVE) && (0 != timeout))) {
12481bd4fe43Sopenharmony_ci        return osErrorParameter;
12491bd4fe43Sopenharmony_ci    }
12501bd4fe43Sopenharmony_ci    if (pstQueue->queueSize < sizeof(UINT32)) {
12511bd4fe43Sopenharmony_ci        return osErrorParameter;
12521bd4fe43Sopenharmony_ci    }
12531bd4fe43Sopenharmony_ci    uwBufferSize = (UINT32)(pstQueue->queueSize - sizeof(UINT32));
12541bd4fe43Sopenharmony_ci    uwRet = LOS_QueueWriteCopy((UINT32)pstQueue->queueID, (void *)msg_ptr, uwBufferSize, timeout);
12551bd4fe43Sopenharmony_ci    if (uwRet == LOS_OK) {
12561bd4fe43Sopenharmony_ci        return osOK;
12571bd4fe43Sopenharmony_ci    } else if (uwRet == LOS_ERRNO_QUEUE_INVALID || uwRet == LOS_ERRNO_QUEUE_NOT_CREATE) {
12581bd4fe43Sopenharmony_ci        return osErrorParameter;
12591bd4fe43Sopenharmony_ci    } else if (uwRet == LOS_ERRNO_QUEUE_TIMEOUT) {
12601bd4fe43Sopenharmony_ci        return osErrorTimeout;
12611bd4fe43Sopenharmony_ci    } else {
12621bd4fe43Sopenharmony_ci        return osErrorResource;
12631bd4fe43Sopenharmony_ci    }
12641bd4fe43Sopenharmony_ci}
12651bd4fe43Sopenharmony_ci
12661bd4fe43Sopenharmony_ci
12671bd4fe43Sopenharmony_ciosStatus_t osMessageQueueGet(osMessageQueueId_t mq_id, void *msg_ptr, uint8_t *msg_prio, uint32_t timeout)
12681bd4fe43Sopenharmony_ci{
12691bd4fe43Sopenharmony_ci    UNUSED(msg_prio);
12701bd4fe43Sopenharmony_ci    UINT32 uwRet;
12711bd4fe43Sopenharmony_ci    UINT32 uwBufferSize;
12721bd4fe43Sopenharmony_ci    LosQueueCB *pstQueue = (LosQueueCB *)mq_id;
12731bd4fe43Sopenharmony_ci
12741bd4fe43Sopenharmony_ci    if (pstQueue == NULL || msg_ptr == NULL || ((OS_INT_ACTIVE) && (0 != timeout))) {
12751bd4fe43Sopenharmony_ci        return osErrorParameter;
12761bd4fe43Sopenharmony_ci    }
12771bd4fe43Sopenharmony_ci
12781bd4fe43Sopenharmony_ci    uwBufferSize = (UINT32)(pstQueue->queueSize - sizeof(UINT32));
12791bd4fe43Sopenharmony_ci    uwRet = LOS_QueueReadCopy((UINT32)pstQueue->queueID, msg_ptr, &uwBufferSize, timeout);
12801bd4fe43Sopenharmony_ci    if (uwRet == LOS_OK) {
12811bd4fe43Sopenharmony_ci        return osOK;
12821bd4fe43Sopenharmony_ci    } else if (uwRet == LOS_ERRNO_QUEUE_INVALID || uwRet == LOS_ERRNO_QUEUE_NOT_CREATE) {
12831bd4fe43Sopenharmony_ci        return osErrorParameter;
12841bd4fe43Sopenharmony_ci    } else if (uwRet == LOS_ERRNO_QUEUE_TIMEOUT) {
12851bd4fe43Sopenharmony_ci        return osErrorTimeout;
12861bd4fe43Sopenharmony_ci    } else {
12871bd4fe43Sopenharmony_ci        return osErrorResource;
12881bd4fe43Sopenharmony_ci    }
12891bd4fe43Sopenharmony_ci}
12901bd4fe43Sopenharmony_ci
12911bd4fe43Sopenharmony_ciuint32_t osMessageQueueGetCapacity(osMessageQueueId_t mq_id)
12921bd4fe43Sopenharmony_ci{
12931bd4fe43Sopenharmony_ci    uint32_t capacity;
12941bd4fe43Sopenharmony_ci    LosQueueCB *pstQueue = (LosQueueCB *)mq_id;
12951bd4fe43Sopenharmony_ci
12961bd4fe43Sopenharmony_ci    if (pstQueue == NULL) {
12971bd4fe43Sopenharmony_ci        capacity = 0U;
12981bd4fe43Sopenharmony_ci    } else {
12991bd4fe43Sopenharmony_ci        capacity = pstQueue->queueLen;
13001bd4fe43Sopenharmony_ci    }
13011bd4fe43Sopenharmony_ci
13021bd4fe43Sopenharmony_ci    return (capacity);
13031bd4fe43Sopenharmony_ci}
13041bd4fe43Sopenharmony_ci
13051bd4fe43Sopenharmony_ciuint32_t osMessageQueueGetMsgSize(osMessageQueueId_t mq_id)
13061bd4fe43Sopenharmony_ci{
13071bd4fe43Sopenharmony_ci    uint32_t size;
13081bd4fe43Sopenharmony_ci    LosQueueCB *pstQueue = (LosQueueCB *)mq_id;
13091bd4fe43Sopenharmony_ci
13101bd4fe43Sopenharmony_ci    if (pstQueue == NULL) {
13111bd4fe43Sopenharmony_ci        size = 0U;
13121bd4fe43Sopenharmony_ci    } else {
13131bd4fe43Sopenharmony_ci        size = pstQueue->queueSize - sizeof(UINT32);
13141bd4fe43Sopenharmony_ci    }
13151bd4fe43Sopenharmony_ci
13161bd4fe43Sopenharmony_ci    return (size);
13171bd4fe43Sopenharmony_ci}
13181bd4fe43Sopenharmony_ci
13191bd4fe43Sopenharmony_ci
13201bd4fe43Sopenharmony_ciuint32_t osMessageQueueGetCount(osMessageQueueId_t mq_id)
13211bd4fe43Sopenharmony_ci{
13221bd4fe43Sopenharmony_ci    uint32_t count;
13231bd4fe43Sopenharmony_ci    UINTPTR uwIntSave;
13241bd4fe43Sopenharmony_ci    LosQueueCB *pstQueue = (LosQueueCB *)mq_id;
13251bd4fe43Sopenharmony_ci
13261bd4fe43Sopenharmony_ci    if (pstQueue == NULL) {
13271bd4fe43Sopenharmony_ci        count = 0U;
13281bd4fe43Sopenharmony_ci    } else {
13291bd4fe43Sopenharmony_ci        uwIntSave = LOS_IntLock();
13301bd4fe43Sopenharmony_ci        count = (uint32_t)(pstQueue->readWriteableCnt[OS_QUEUE_READ]);
13311bd4fe43Sopenharmony_ci        LOS_IntRestore(uwIntSave);
13321bd4fe43Sopenharmony_ci    }
13331bd4fe43Sopenharmony_ci    return count;
13341bd4fe43Sopenharmony_ci}
13351bd4fe43Sopenharmony_ci
13361bd4fe43Sopenharmony_ci
13371bd4fe43Sopenharmony_ciuint32_t osMessageQueueGetSpace(osMessageQueueId_t mq_id)
13381bd4fe43Sopenharmony_ci{
13391bd4fe43Sopenharmony_ci    uint32_t space;
13401bd4fe43Sopenharmony_ci    UINTPTR uwIntSave;
13411bd4fe43Sopenharmony_ci    LosQueueCB *pstQueue = (LosQueueCB *)mq_id;
13421bd4fe43Sopenharmony_ci
13431bd4fe43Sopenharmony_ci    if (pstQueue == NULL) {
13441bd4fe43Sopenharmony_ci        space = 0U;
13451bd4fe43Sopenharmony_ci    } else {
13461bd4fe43Sopenharmony_ci        uwIntSave = LOS_IntLock();
13471bd4fe43Sopenharmony_ci        space = (uint32_t)pstQueue->readWriteableCnt[OS_QUEUE_WRITE];
13481bd4fe43Sopenharmony_ci        LOS_IntRestore(uwIntSave);
13491bd4fe43Sopenharmony_ci    }
13501bd4fe43Sopenharmony_ci    return space;
13511bd4fe43Sopenharmony_ci}
13521bd4fe43Sopenharmony_ci
13531bd4fe43Sopenharmony_ciosStatus_t osMessageQueueDelete(osMessageQueueId_t mq_id)
13541bd4fe43Sopenharmony_ci{
13551bd4fe43Sopenharmony_ci    LosQueueCB *pstQueue = (LosQueueCB *)mq_id;
13561bd4fe43Sopenharmony_ci    UINT32 uwRet;
13571bd4fe43Sopenharmony_ci
13581bd4fe43Sopenharmony_ci    if (pstQueue == NULL) {
13591bd4fe43Sopenharmony_ci        return osErrorParameter;
13601bd4fe43Sopenharmony_ci    }
13611bd4fe43Sopenharmony_ci
13621bd4fe43Sopenharmony_ci    if (OS_INT_ACTIVE) {
13631bd4fe43Sopenharmony_ci        return osErrorISR;
13641bd4fe43Sopenharmony_ci    }
13651bd4fe43Sopenharmony_ci
13661bd4fe43Sopenharmony_ci    uwRet = LOS_QueueDelete((UINT32)pstQueue->queueID);
13671bd4fe43Sopenharmony_ci    if (uwRet == LOS_OK) {
13681bd4fe43Sopenharmony_ci        return osOK;
13691bd4fe43Sopenharmony_ci    } else if (uwRet == LOS_ERRNO_QUEUE_NOT_FOUND || uwRet == LOS_ERRNO_QUEUE_NOT_CREATE) {
13701bd4fe43Sopenharmony_ci        return osErrorParameter;
13711bd4fe43Sopenharmony_ci    } else {
13721bd4fe43Sopenharmony_ci        return osErrorResource;
13731bd4fe43Sopenharmony_ci    }
13741bd4fe43Sopenharmony_ci}
13751bd4fe43Sopenharmony_civoid osThreadExit(void)
13761bd4fe43Sopenharmony_ci{
13771bd4fe43Sopenharmony_ci    return;
13781bd4fe43Sopenharmony_ci}
13791bd4fe43Sopenharmony_ci#endif
13801bd4fe43Sopenharmony_ci
13811bd4fe43Sopenharmony_ci#endif // (CMSIS_OS_VER == 2)
13821bd4fe43Sopenharmony_ci#ifdef __cplusplus
13831bd4fe43Sopenharmony_ci#if __cplusplus
13841bd4fe43Sopenharmony_ci}
13851bd4fe43Sopenharmony_ci#endif /* __cplusplus */
13861bd4fe43Sopenharmony_ci#endif /* __cplusplus */
1387