19c6d7c21Sopenharmony_ci/*
29c6d7c21Sopenharmony_ci * Copyright (c) 2020 Huawei Device Co., Ltd.
39c6d7c21Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
49c6d7c21Sopenharmony_ci * you may not use this file except in compliance with the License.
59c6d7c21Sopenharmony_ci * You may obtain a copy of the License at
69c6d7c21Sopenharmony_ci *
79c6d7c21Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
89c6d7c21Sopenharmony_ci *
99c6d7c21Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
109c6d7c21Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
119c6d7c21Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
129c6d7c21Sopenharmony_ci * See the License for the specific language governing permissions and
139c6d7c21Sopenharmony_ci * limitations under the License.
149c6d7c21Sopenharmony_ci */
159c6d7c21Sopenharmony_ci#include "thread_adapter.h"
169c6d7c21Sopenharmony_ci#include "common.h"
179c6d7c21Sopenharmony_ci#include <cmsis_os.h>
189c6d7c21Sopenharmony_ci
199c6d7c21Sopenharmony_ci
209c6d7c21Sopenharmony_ciMutexId MUTEX_InitValue()
219c6d7c21Sopenharmony_ci{
229c6d7c21Sopenharmony_ci    return osMutexNew(NULL);
239c6d7c21Sopenharmony_ci}
249c6d7c21Sopenharmony_ci
259c6d7c21Sopenharmony_civoid MUTEX_Lock(MutexId mutex)
269c6d7c21Sopenharmony_ci{
279c6d7c21Sopenharmony_ci    if (mutex == NULL) {
289c6d7c21Sopenharmony_ci        return;
299c6d7c21Sopenharmony_ci    }
309c6d7c21Sopenharmony_ci    osMutexAcquire(mutex, osWaitForever);
319c6d7c21Sopenharmony_ci}
329c6d7c21Sopenharmony_ci
339c6d7c21Sopenharmony_civoid MUTEX_Unlock(MutexId mutex)
349c6d7c21Sopenharmony_ci{
359c6d7c21Sopenharmony_ci    if (mutex == NULL) {
369c6d7c21Sopenharmony_ci        return;
379c6d7c21Sopenharmony_ci    }
389c6d7c21Sopenharmony_ci    osMutexRelease(mutex);
399c6d7c21Sopenharmony_ci}
409c6d7c21Sopenharmony_ci
419c6d7c21Sopenharmony_civoid MUTEX_GlobalLock(void)
429c6d7c21Sopenharmony_ci{
439c6d7c21Sopenharmony_ci    osKernelLock();
449c6d7c21Sopenharmony_ci}
459c6d7c21Sopenharmony_ci
469c6d7c21Sopenharmony_civoid MUTEX_GlobalUnlock(void)
479c6d7c21Sopenharmony_ci{
489c6d7c21Sopenharmony_ci    osKernelUnlock();
499c6d7c21Sopenharmony_ci}
509c6d7c21Sopenharmony_ci
519c6d7c21Sopenharmony_ciThreadId THREAD_Create(Runnable run, void *argv, const ThreadAttr *attr)
529c6d7c21Sopenharmony_ci{
539c6d7c21Sopenharmony_ci    osThreadAttr_t taskAttr = {attr->name, 0, NULL, 0, NULL, attr->stackSize, (osPriority_t)(attr->priority), 0, 0};
549c6d7c21Sopenharmony_ci    return (ThreadId)osThreadNew((osThreadFunc_t)run, argv, &taskAttr);
559c6d7c21Sopenharmony_ci}
569c6d7c21Sopenharmony_ci
579c6d7c21Sopenharmony_ciint THREAD_Total(void)
589c6d7c21Sopenharmony_ci{
599c6d7c21Sopenharmony_ci    return osThreadGetCount();
609c6d7c21Sopenharmony_ci}
619c6d7c21Sopenharmony_ci
629c6d7c21Sopenharmony_civoid *THREAD_GetThreadLocal(void)
639c6d7c21Sopenharmony_ci{
649c6d7c21Sopenharmony_ci    return osThreadGetArgument();
659c6d7c21Sopenharmony_ci}
669c6d7c21Sopenharmony_ci
679c6d7c21Sopenharmony_civoid THREAD_SetThreadLocal(const void *local)
689c6d7c21Sopenharmony_ci{
699c6d7c21Sopenharmony_ci    (void)local;
709c6d7c21Sopenharmony_ci}
71