/* * Copyright (c) 2021 Huawei Device Co., Ltd. * * HDF is dual licensed: you can use it either under the terms of * the GPL, or the BSD license, at your option. * See the LICENSE file in the root of this repository for complete details. */ #include "hdf_thread_ex.h" #include "osal_mem.h" #include "osal_thread.h" void HdfThreadStart(struct HdfThread *thread) { if (thread == NULL) { return; } struct OsalThreadParam param = { .priority = OSAL_THREAD_PRI_DEFAULT, .stackSize = 0, }; OsalThreadStart(&thread->adapter, ¶m); thread->status = true; } void HdfThreadStop(struct HdfThread *thread) { if (thread == NULL) { return; } OsalThreadDestroy(&thread->adapter); thread->status = false; } bool HdfThreadIsRunning(struct HdfThread *thread) { if (thread == NULL) { return false; } return thread->status; } void HdfThreadMain(void *argv) { struct HdfThread *thread = (struct HdfThread *)argv; if (thread == NULL) { return; } if (thread->ThreadEntry != NULL) { thread->ThreadEntry(argv); } else { OsalThreadDestroy(&thread->adapter); } } void HdfThreadConstruct(struct HdfThread *thread) { if (thread == NULL) { return; } thread->Start = HdfThreadStart; thread->Stop = HdfThreadStop; thread->IsRunning = HdfThreadIsRunning; thread->status = false; OsalThreadCreate(&thread->adapter, (OsalThreadEntry)HdfThreadMain, thread); } void HdfThreadDestruct(struct HdfThread *thread) { if (thread != NULL && thread->IsRunning()) { thread->Stop(thread); } } struct HdfThread *HdfThreadNewInstance() { struct HdfThread *thread = (struct HdfThread *)OsalMemCalloc(sizeof(struct HdfThread)); if (thread != NULL) { HdfThreadConstruct(thread); } return thread; } void HdfThreadFreeInstance(struct HdfThread *thread) { if (thread != NULL) { HdfThreadDestruct(thread); OsalMemFree(thread); } }