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