M4OSA_Thread.c revision 855ec7c4be7ad642721909d5837a8d25a117c22f
1855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/* 2855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * Copyright (C) 2004-2011 NXP Software 3855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * Copyright (C) 2011 The Android Open Source Project 4855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * 5855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * Licensed under the Apache License, Version 2.0 (the "License"); 6855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * you may not use this file except in compliance with the License. 7855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * You may obtain a copy of the License at 8855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * 9855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * http://www.apache.org/licenses/LICENSE-2.0 10855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * 11855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * Unless required by applicable law or agreed to in writing, software 12855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * distributed under the License is distributed on an "AS IS" BASIS, 13855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * See the License for the specific language governing permissions and 15855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * limitations under the License. 16855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi */ 17855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 18855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/** 19855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************ 20855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @file M4OSA_Thread.c 21855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @ingroup OSAL 22855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @brief Implements and manipulate threads 23855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @note This file implements functions to manipulate threads 24855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************ 25855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/ 26855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 27855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include <sched.h> 28855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include <time.h> 29855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include <pthread.h> 30855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include <errno.h> 31855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 32855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include <utils/threads.h> 33855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include "M4OSA_Debug.h" 34855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include "M4OSA_Memory.h" 35855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include "M4OSA_Thread.h" 36855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include "M4OSA_Thread_priv.h" 37855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include "M4OSA_Mutex.h" 38855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include "M4OSA_Semaphore.h" 39855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include "M4OSA_CharStar.h" 40855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 41855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 42855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargivoid* M4OSA_threadSyncForEverDo(void *context) 43855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{ 44855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_ThreadContext* threadContext = (M4OSA_ThreadContext*)context; 45855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_Bool auto_kill = M4OSA_FALSE; 46855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 47855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* 48855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_Void* userData; 49855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi */ 50855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 51855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE2_1("M4OSA_threadSyncForEverDo\t\tLPVOID 0x%x", context); 52855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 53855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* 54855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi userData = threadContext->userData; 55855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi */ 56855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 57855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_mutexLock(threadContext->stateMutex, M4OSA_WAIT_FOREVER); 58855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 59855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /*if(threadContext->startCallBack != M4OSA_NULL) 60855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 61855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi threadContext->startCallBack(threadContext, userData); 62855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi }*/ 63855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 64855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi threadContext->state = M4OSA_kThreadRunning; 65855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 66855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_semaphorePost(threadContext->semStartStop); 67855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 68855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi while(threadContext->state == M4OSA_kThreadRunning) 69855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 70855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_mutexUnlock(threadContext->stateMutex); 71855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 72855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if((threadContext->func(threadContext->param)) != M4NO_ERROR) 73855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 74855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_mutexLock(threadContext->stateMutex, M4OSA_WAIT_FOREVER); 75855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 76855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if(threadContext->state == M4OSA_kThreadRunning) 77855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 78855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 79855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi //PR 2354 - ACO : Suppress stopping state and don't 80855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi // unlock mutex before closing the thread 81855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi threadContext->state = M4OSA_kThreadOpened; 82855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_mutexUnlock(threadContext->stateMutex); 83855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return 0; 84855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 85855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 86855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_mutexUnlock(threadContext->stateMutex); 87855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 88855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 89855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_mutexLock(threadContext->stateMutex, M4OSA_WAIT_FOREVER); 90855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 91855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 92855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 93855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_semaphorePost(threadContext->semStartStop); 94855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 95855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 96855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_mutexUnlock(threadContext->stateMutex); 97855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 98855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 99855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return 0; 100855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi} 101855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 102855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 103855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 104855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 105855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 106855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/** 107855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************ 108855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @brief This method creates a new thread. After this call the thread is 109855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * identified by its "context". The thread function is provided by 110855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * the "func" parameter. This function creates & allocates a unique 111855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * context. It's the OSAL real time responsibility for managing its 112855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * context. It must be freed by the M4OSA_threadSyncClose function. 113855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * The context parameter will be sent back to any OSAL core thread 114855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * functions to allow retrieving data associated to the opened 115855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * thread. 116855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @note This function creates the thread, but the thread is not running. 117855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @note Once the thread is created, the state is M4OSA_kThreadOpened. 118855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param context:(OUT) Context of the created thread 119855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param func:(IN) "doIt" function pointer to run 120855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4NO_ERROR: there is no error 121855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_PARAMETER: at least one parameter is NULL 122855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_ALLOC: there is no more available memory 123855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_CONTEXT_FAILED: the context creation failed 124855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************ 125855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/ 126855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSA_ERR M4OSA_threadSyncOpen(M4OSA_Context* context, 127855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_ThreadDoIt func) 128855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{ 129855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_ThreadContext* threadContext = M4OSA_NULL; 130855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_ERR err_code; 131855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 132855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE1_2("M4OSA_threadSyncOpen\t\tM4OSA_Context* 0x%x\t" 133855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi "M4OSA_ThreadDoIt 0x%x", context, func); 134855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 135855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(context == M4OSA_NULL, 136855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4ERR_PARAMETER, "M4OSA_threadSyncOpen"); 137855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 138855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(func == M4OSA_NULL, 139855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4ERR_PARAMETER, "M4OSA_threadSyncOpen"); 140855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 141855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *context = M4OSA_NULL; 142855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 143855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi threadContext = 144855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi (M4OSA_ThreadContext*)M4OSA_malloc(sizeof(M4OSA_ThreadContext), 145855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_THREAD, (M4OSA_Char*)"M4OSA_threadSyncOpen: thread context"); 146855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 147855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if(threadContext == M4OSA_NULL) 148855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 149855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG(M4ERR_ALLOC, "M4OSA_threadSyncOpen"); 150855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 151855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4ERR_ALLOC; 152855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 153855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 154855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi threadContext->func = func; 155855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi threadContext->stackSize = 64 * 1024; 156855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi threadContext->name = M4OSA_NULL; 157855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi threadContext->threadID = 0; 158855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi threadContext->coreID = M4OSA_THREAD; 159855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/* 160855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi threadContext->userData = M4OSA_NULL; 161855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi threadContext->stopCallBack = M4OSA_NULL; 162855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi threadContext->startCallBack = M4OSA_NULL; 163855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/ 164855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi threadContext->state = M4OSA_kThreadOpened; 165855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi threadContext->priority = M4OSA_kThreadNormalPriority ; 166855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 167855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi err_code = M4OSA_mutexOpen(&(threadContext->stateMutex)); 168855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 169855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if(M4OSA_ERR_IS_ERROR(err_code)) 170855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 171855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG(err_code, "M4OSA_threadSyncOpen: M4OSA_mutexOpen"); 172855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 173855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return err_code; 174855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 175855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 176855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi err_code = M4OSA_semaphoreOpen(&(threadContext->semStartStop), 0); 177855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 178855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if(M4OSA_ERR_IS_ERROR(err_code)) 179855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 180855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG(err_code, "M4OSA_threadSyncOpen: M4OSA_semaphoreOpen"); 181855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 182855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return err_code; 183855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 184855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 185855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *context = threadContext; 186855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 187855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4NO_ERROR; 188855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi} 189855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 190855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 191855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 192855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 193855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 194855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/** 195855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************ 196855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @brief This method runs a specified thread. The "param" parameter 197855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * allows the application to set a specific parameter to the 198855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * created thread. This parameter will be used as the second one of 199855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * the "M4OSA_ThreadDoIt" function. 200855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @note This method is a blocking up to the thread is running. 201855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * Before calling this method, the state is M4OSA_kThreadOpened. 202855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * Once the method is called, the state is M4OSA_kThreadStarting. 203855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * Once the thread is running, the state is M4OSA_kThreadRunning. 204855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @note This method returns immediately. If the "threadStarted" optionID 205855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * is not NULL, the thread will call it before running the doIt 206855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * function. 207855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param context:(IN/OUT) Context of the thread 208855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param param:(IN) Application data thread parameter 209855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4NO_ERROR: there is no error 210855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_PARAMETER: at least one parameter is NULL 211855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_BAD_CONTEXT: provided context is not a valid one 212855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_STATE: this function cannot be called now 213855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_THREAD_NOT_STARTED: the thread did not start 214855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************ 215855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/ 216855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSA_ERR M4OSA_threadSyncStart(M4OSA_Context context, 217855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_Void* param) 218855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{ 219855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_ThreadContext* threadContext = (M4OSA_ThreadContext*)context; 220855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi pthread_attr_t attribute = { 0, 0, 0, 0, 0, 0 }; 221855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi int min = 0; 222855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi int max = 0; 223855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi int priority = 0; 224855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi struct sched_param sched = { 0 }; 225855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 226855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE1_2("M4OSA_threadSyncStart\t\tM4OSA_Context 0x%x\tM4OSA_Void* " 227855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi "0x%x", context, param); 228855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 229855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(context == M4OSA_NULL, 230855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4ERR_PARAMETER, "M4OSA_threadSyncStart"); 231855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 232855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(threadContext->coreID != M4OSA_THREAD, 233855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4ERR_BAD_CONTEXT, "M4OSA_threadSyncStart"); 234855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 235855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_mutexLock(threadContext->stateMutex, M4OSA_WAIT_FOREVER); 236855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 237855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if(threadContext->state != M4OSA_kThreadOpened) 238855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 239855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_mutexUnlock(threadContext->stateMutex); 240855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 241855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG(M4ERR_STATE, "M4OSA_threadSyncStart"); 242855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 243855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4ERR_STATE; 244855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 245855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 246855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi threadContext->state = M4OSA_kThreadStarting; 247855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 248855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_mutexUnlock(threadContext->stateMutex); 249855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi threadContext->param = param; 250855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 251855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if ( 0 == pthread_attr_init( &attribute ) ) 252855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 253855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if ( 0 == pthread_attr_setdetachstate( &attribute, PTHREAD_CREATE_DETACHED ) ) 254855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 255855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if ( 0 == pthread_attr_setstacksize( &attribute, (size_t)threadContext->stackSize ) ) 256855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 257855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if ( 0 == pthread_attr_setschedpolicy( &attribute, SCHED_OTHER ) ) 258855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 259855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#if 0 260855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi min = sched_get_priority_min( SCHED_OTHER ); 261855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi max = sched_get_priority_max( SCHED_OTHER ); 262855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 263855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi switch(threadContext->priority) 264855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 265855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi case M4OSA_kThreadLowestPriority: 266855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi priority = min; 267855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi break; 268855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi case M4OSA_kThreadLowPriority: 269855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi priority = min + ( max - min ) / 4; 270855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi break; 271855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi case M4OSA_kThreadNormalPriority: 272855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi priority = min + ( max - min ) / 2; 273855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi break; 274855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi case M4OSA_kThreadHighPriority: 275855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi priority = max - ( max - min ) / 4; 276855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi break; 277855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi case M4OSA_kThreadHighestPriority: 278855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi priority = max; 279855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi break; 280855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 281855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#else 282855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* Tentative patches to handle priorities in a better way : */ 283855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* Use Android's predefined priorities (range +19..-20) 284855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *rather than Linux ones (0..99)*/ 285855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 286855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* Get min and max priorities */ 287855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi min = sched_get_priority_min( SCHED_FIFO ); 288855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi max = sched_get_priority_max( SCHED_FIFO ); 289855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 290855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE1_2("M4OSA_threadSyncStart MAX=%d MIN=%d", max, min); 291855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 292855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* tentative modification of the priorities */ 293855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* Set the priority based on default android priorities */ 294855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* This probably requires some more tuning, 295855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * outcome of this priority settings are not yet satisfactory */ 296855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* Implementing thread handling based on Android's thread creation 297855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * helpers might bring some improvement (see threads.h) */ 298855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi switch(threadContext->priority) 299855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 300855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi case M4OSA_kThreadLowestPriority: 301855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi priority = ANDROID_PRIORITY_NORMAL; 302855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi break; 303855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi case M4OSA_kThreadLowPriority: 304855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi priority = ANDROID_PRIORITY_DISPLAY; 305855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi break; 306855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi case M4OSA_kThreadNormalPriority: 307855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi priority = ANDROID_PRIORITY_URGENT_DISPLAY; 308855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi break; 309855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi case M4OSA_kThreadHighPriority: 310855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi priority = ANDROID_PRIORITY_AUDIO; 311855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi break; 312855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi case M4OSA_kThreadHighestPriority: 313855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi priority = ANDROID_PRIORITY_URGENT_AUDIO; 314855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi break; 315855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 316855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif 317855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi sched.sched_priority = priority; 318855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 319855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if ( 0 == pthread_attr_setschedparam( &attribute, &sched ) ) 320855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 321855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if ( 0 == pthread_create( &threadContext->threadID, 322855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi &attribute, 323855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi &M4OSA_threadSyncForEverDo, 324855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi (void *)threadContext ) ) 325855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 326855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if ( M4OSA_FALSE == M4OSA_ERR_IS_ERROR( M4OSA_semaphoreWait( 327855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi threadContext->semStartStop, 328855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_WAIT_FOREVER ) ) ) 329855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 330855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4NO_ERROR; 331855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 332855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 333855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 334855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 335855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 336855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 337855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi pthread_attr_destroy( &attribute ); 338855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 339855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 340855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_mutexLock(threadContext->stateMutex, M4OSA_WAIT_FOREVER); 341855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 342855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi threadContext->state = M4OSA_kThreadOpened; 343855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 344855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_mutexUnlock(threadContext->stateMutex); 345855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 346855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG(M4ERR_THREAD_NOT_STARTED, "M4OSA_threadSyncStart"); 347855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 348855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4ERR_THREAD_NOT_STARTED; 349855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi} 350855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 351855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 352855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 353855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 354855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/** 355855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************ 356855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @brief This method stops a specified thread. 357855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @note This call is a blocking one up to the "M4OSA_ThreadDoIt" 358855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * function has returned. 359855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * Before the method is called, the state is M4OSA_kThreadRunning. 360855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * Once the method is called, the state is M4OSA_kThreadStopping. 361855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * Once the thread is stopped, the state is M4OSA_kThreadOpened. 362855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @note This method returns once the thread has been stopped. If the 363855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * "threadStopped" optionID is not NULL, the thread will call it 364855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * before dying. 365855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param context:(IN/OUT) Context of the thread 366855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4NO_ERROR: there is no error 367855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_PARAMETER: at least one parameter is NULL 368855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_STATE: this function cannot be called now 369855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_BAD_CONTEXT: provided context is not a valid one 370855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************ 371855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/ 372855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSA_ERR M4OSA_threadSyncStop(M4OSA_Context context) 373855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{ 374855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_ThreadContext* threadContext = (M4OSA_ThreadContext*)context; 375855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 376855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE1_1("M4OSA_threadSyncStop\t\tM4OSA_Context 0x%x", context); 377855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 378855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(context == M4OSA_NULL, 379855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4ERR_PARAMETER, "M4OSA_threadSyncStop"); 380855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 381855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(threadContext->coreID != M4OSA_THREAD, 382855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4ERR_BAD_CONTEXT, "M4OSA_threadSyncStop"); 383855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 384855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_mutexLock(threadContext->stateMutex, M4OSA_WAIT_FOREVER); 385855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 386855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if(threadContext->state != M4OSA_kThreadRunning) 387855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 388855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_mutexUnlock(threadContext->stateMutex); 389855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 390855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG(M4ERR_STATE, "M4OSA_threadSyncStop"); 391855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 392855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4ERR_STATE; 393855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 394855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 395855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi threadContext->state = M4OSA_kThreadStopping; 396855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 397855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_mutexUnlock(threadContext->stateMutex); 398855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 399855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_semaphoreWait(threadContext->semStartStop, M4OSA_WAIT_FOREVER); 400855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 401855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_mutexLock(threadContext->stateMutex, M4OSA_WAIT_FOREVER); 402855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 403855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi threadContext->state = M4OSA_kThreadOpened; 404855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 405855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_mutexUnlock(threadContext->stateMutex); 406855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 407855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4NO_ERROR; 408855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi} 409855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 410855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 411855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 412855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 413855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/** 414855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************ 415855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @brief This method deletes a thread (identified by its context). After 416855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * this call the thread and its context are no more useable. This 417855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * function frees all the memory related to this thread. 418855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @note Before the method is called, the state is M4OSA_kThreadOpened. 419855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * Once the method is called, the state is M4OSA_kThreadClosed. 420855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param context:(IN/OUT) Context of the thread 421855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4NO_ERROR: there is no error 422855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_PARAMETER: at least one parameter is NULL 423855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_STATE: this function cannot be called now 424855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_BAD_CONTEXT: provided context is not a valid one 425855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************ 426855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/ 427855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSA_ERR M4OSA_threadSyncClose(M4OSA_Context context) 428855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{ 429855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_ThreadContext* threadContext = (M4OSA_ThreadContext*)context; 430855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_ERR err_code; 431855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 432855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE1_1("M4OSA_threadSyncClose\t\tM4OSA_Context 0x%x", context); 433855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 434855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(context == M4OSA_NULL, 435855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4ERR_PARAMETER, "M4OSA_threadSyncClose"); 436855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 437855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(threadContext->coreID != M4OSA_THREAD, 438855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4ERR_BAD_CONTEXT, "M4OSA_threadSyncClose"); 439855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 440855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(threadContext->state == M4OSA_kThreadClosed, 441855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4ERR_BAD_CONTEXT, "M4OSA_threadSyncClose"); 442855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 443855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_mutexLock(threadContext->stateMutex, M4OSA_WAIT_FOREVER); 444855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 445855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if(threadContext->state != M4OSA_kThreadOpened) 446855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 447855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_mutexUnlock(threadContext->stateMutex); 448855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 449855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG(M4ERR_STATE, "M4OSA_threadSyncClose"); 450855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 451855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4ERR_STATE; 452855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 453855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 454855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi threadContext->state = M4OSA_kThreadClosed; 455855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 456855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_mutexUnlock(threadContext->stateMutex); 457855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 458855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi err_code = M4OSA_mutexClose(threadContext->stateMutex); 459855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 460855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if(M4OSA_ERR_IS_ERROR(err_code)) 461855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 462855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG(err_code, "M4OSA_threadSyncClose: M4OSA_mutexClose"); 463855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 464855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return err_code; 465855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 466855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 467855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi err_code = M4OSA_semaphoreClose(threadContext->semStartStop); 468855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 469855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if(M4OSA_ERR_IS_ERROR(err_code)) 470855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 471855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG(err_code, "M4OSA_threadSyncClose: M4OSA_semaphoreClose"); 472855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 473855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return err_code; 474855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 475855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 476855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if(threadContext->name != M4OSA_NULL) 477855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 478855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_free((M4OSA_MemAddr32)threadContext->name); 479855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 480855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 481855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_free((M4OSA_MemAddr32)threadContext); 482855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 483855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4NO_ERROR; 484855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi} 485855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 486855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 487855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 488855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 489855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/** 490855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************ 491855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @brief This method asks the thread to return its state. 492855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @note The caller is responsible for allocating/deallocating the state 493855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * field. 494855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param context:(IN) Context of the thread 495855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param state:(OUT) Thread state 496855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4NO_ERROR: there is no error 497855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_PARAMETER: at least one parameter is NULL 498855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_BAD_CONTEXT: provided context is not a valid one 499855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************ 500855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/ 501855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSA_ERR M4OSA_threadSyncGetState(M4OSA_Context context, 502855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_ThreadState* state) 503855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{ 504855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_ThreadContext* threadContext = (M4OSA_ThreadContext*)context; 505855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 506855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE1_2("M4OSA_threadSyncGetState\t\tM4OSA_Context 0x%x\t" 507855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi "M4OSA_ThreadState* 0x%x", context, state); 508855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 509855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(context == M4OSA_NULL, 510855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4ERR_PARAMETER, "M4OSA_threadSyncGetState"); 511855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 512855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(state == M4OSA_NULL, 513855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4ERR_PARAMETER, "M4OSA_threadSyncGetState"); 514855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 515855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(threadContext->coreID != M4OSA_THREAD, 516855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4ERR_BAD_CONTEXT, "M4OSA_threadSyncGetState"); 517855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 518855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *state = threadContext->state; 519855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 520855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4NO_ERROR; 521855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi} 522855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 523855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 524855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 525855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 526855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/** 527855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************ 528855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @brief This method asks the calling thread to sleep during "timeSleep" 529855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * milliseconds. 530855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @note This function does not have any context. 531855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param time:(IN) Time to sleep in milliseconds 532855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4NO_ERROR: there is no error 533855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************ 534855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/ 535855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSA_ERR M4OSA_threadSleep(M4OSA_UInt32 time) 536855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{ 537855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi struct timespec rqtp = { 0, 0 }; 538855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi struct timespec rmtp = { 0, 0 }; 539855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 540855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE1_1("M4OSA_threadSleep\t\tM4OSA_UInt32 %d", time); 541855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 542855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi rqtp.tv_sec = (time_t)time/1000; 543855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi rqtp.tv_nsec = (time%1000) * 1000000; 544855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi nanosleep(&rqtp, &rmtp); 545855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 546855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4NO_ERROR; 547855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi} 548855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 549855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 550855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 551855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 552855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#if(M4OSA_OPTIONID_THREAD_STARTED == M4OSA_TRUE) 553855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 554855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/*M4OSA_ERR M4OSA_SetThreadSyncStarted(M4OSA_Context context, 555855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DataOption optionValue) 556855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{ 557855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_ThreadContext* threadContext = (M4OSA_ThreadContext*)context ; 558855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 559855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE2_2("M4OSA_SetThreadSyncStarted\t\tM4OSA_Context 0x%x\t" 560855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi "M4OSA_DataOption 0x%x", context, optionValue); 561855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 562855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi threadContext->startCallBack = (M4OSA_ThreadCallBack)optionValue; 563855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 564855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4NO_ERROR; 565855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi}*/ 566855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 567855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /*M4OSA_OPTIONID_THREAD_STARTED*/ 568855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 569855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 570855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 571855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 572855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#if(M4OSA_OPTIONID_THREAD_STOPPED == M4OSA_TRUE) 573855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 574855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/*M4OSA_ERR M4OSA_SetThreadSyncStopped(M4OSA_Context context, 575855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DataOption optionValue) 576855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{ 577855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_ThreadContext* threadContext = (M4OSA_ThreadContext*)context; 578855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 579855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE2_2("M4OSA_SetThreadSyncStopped\t\tM4OSA_Context 0x%x\t" 580855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi "M4OSA_DataOption 0x%x", context, optionValue); 581855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 582855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi threadContext->stopCallBack = (M4OSA_ThreadCallBack)optionValue; 583855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 584855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4NO_ERROR; 585855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi}*/ 586855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 587855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /*M4OSA_OPTIONID_THREAD_STOPPED*/ 588855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 589855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 590855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 591855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#if(M4OSA_OPTIONID_THREAD_PRIORITY == M4OSA_TRUE) 592855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 593855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSA_ERR M4OSA_SetThreadSyncPriority(M4OSA_Context context, 594855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DataOption optionValue) 595855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{ 596855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_ThreadContext* threadContext = (M4OSA_ThreadContext*)context; 597855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_ThreadPriorityLevel priority 598855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi = (M4OSA_ThreadPriorityLevel)(optionValue); 599855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 600855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE2_2("M4OSA_SetThreadSyncPriority\t\tM4OSA_Context 0x%x\t" 601855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi "M4OSA_DataOption 0x%x", context, optionValue); 602855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 603855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if((M4OSA_UInt32)optionValue>M4OSA_kThreadLowestPriority) 604855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 605855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4ERR_PARAMETER; 606855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 607855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 608855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi threadContext->priority = priority; 609855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 610855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4NO_ERROR; 611855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi} 612855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 613855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /*M4OSA_OPTIONID_THREAD_PRIORITY*/ 614855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 615855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 616855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 617855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 618855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#if(M4OSA_OPTIONID_THREAD_NAME == M4OSA_TRUE) 619855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 620855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSA_ERR M4OSA_SetThreadSyncName(M4OSA_Context context, 621855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DataOption optionValue) 622855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{ 623855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_ThreadContext* threadContext = (M4OSA_ThreadContext*)context; 624855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_Char* name = (M4OSA_Char*)optionValue; 625855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_UInt32 nameSize ; 626855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 627855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE2_2("M4OSA_SetThreadSyncName\t\tM4OSA_Context 0x%x\t" 628855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi "M4OSA_DataOption 0x%x", context, optionValue); 629855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 630855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if(threadContext->name != NULL) 631855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 632855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_free((M4OSA_MemAddr32)threadContext->name); 633855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi threadContext->name = M4OSA_NULL; 634855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 635855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 636855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if(optionValue != M4OSA_NULL) 637855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 638855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi nameSize = M4OSA_chrLength(name)+1; 639855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 640855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi threadContext->name = 641855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi (M4OSA_Char*)M4OSA_malloc(nameSize, M4OSA_THREAD, 642855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi (M4OSA_Char*)"M4OSA_SetThreadSyncName: thread name"); 643855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 644855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if(threadContext == M4OSA_NULL) 645855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 646855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4ERR_ALLOC; 647855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 648855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 649855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_memcpy((M4OSA_MemAddr8)threadContext->name, (M4OSA_MemAddr8)name, 650855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi nameSize); 651855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 652855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 653855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4NO_ERROR; 654855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi} 655855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 656855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /*M4OSA_OPTIONID_THREAD_NAME*/ 657855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 658855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 659855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#if(M4OSA_OPTIONID_THREAD_STACK_SIZE == M4OSA_TRUE) 660855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 661855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSA_ERR M4OSA_SetThreadSyncStackSize(M4OSA_Context context, 662855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DataOption optionValue) 663855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{ 664855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_ThreadContext* threadContext = (M4OSA_ThreadContext*)context; 665855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 666855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE2_2("M4OSA_SetThreadSyncStackSize\t\tM4OSA_Context 0x%x\t" 667855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi "M4OSA_DataOption 0x%x", context, optionValue); 668855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 669855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi threadContext->stackSize = (M4OSA_UInt32)optionValue; 670855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 671855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4NO_ERROR; 672855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi} 673855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 674855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /*M4OSA_OPTIONID_THREAD_STACK_SIZE*/ 675855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 676855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 677855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 678855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#if(M4OSA_OPTIONID_THREAD_USER_DATA == M4OSA_TRUE) 679855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 680855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/*M4OSA_ERR M4OSA_SetThreadSyncUserData(M4OSA_Context context, 681855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DataOption optionValue) 682855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{ 683855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_ThreadContext* threadContext = (M4OSA_ThreadContext*)context; 684855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 685855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE2_2("M4OSA_SetThreadSyncUserData\t\tM4OSA_Context 0x%x\t" 686855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi "M4OSA_DataOption 0x%x", context, optionValue); 687855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 688855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi threadContext->userData = (M4OSA_Void*)optionValue; 689855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 690855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4NO_ERROR; 691855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi}*/ 692855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 693855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /*M4OSA_OPTIONID_THREAD_USER_DATA*/ 694855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 695855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 696855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 697855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 698855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 699855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/** 700855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************ 701855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @brief This method asks the core OSAL-Thread component to set the value 702855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * associated with the optionID. The caller is responsible for 703855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * allocating/deallocating the memory of the value field. 704855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @note As the caller is responsible of allocating/de-allocating the 705855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * "value" field, the callee must copy this field to its internal 706855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * variable. 707855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param context:(IN/OUT) Context of the thread 708855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param optionID:(IN) ID of the option 709855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param optionValue:(IN) Value of the option 710855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4NO_ERROR: there is no error 711855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_PARAMETER: at least one parameter is NULL 712855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_BAD_CONTEXT: provided context is not a valid one 713855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_BAD_OPTION_ID: the optionID is not a valid one 714855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_STATE: this option is not available now 715855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_READ_ONLY: this option is a read only one 716855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_NOT_IMPLEMENTED: this option is not implemented 717855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************ 718855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/ 719855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSA_ERR M4OSA_threadSyncSetOption(M4OSA_Context context, 720855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_ThreadOptionID optionID, 721855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DataOption optionValue) 722855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{ 723855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_ThreadContext* threadContext = (M4OSA_ThreadContext*)context; 724855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_ERR err_code; 725855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 726855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE1_3("M4OSA_threadSyncSetOption\t\tM4OSA_Context 0x%x\t" 727855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi "M4OSA_OptionID %d\tM4OSA_DataOption 0x%x", 728855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi context, optionID, optionValue); 729855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 730855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(context == M4OSA_NULL, 731855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4ERR_PARAMETER, "M4OSA_threadSyncSetOption"); 732855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 733855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(optionID == M4OSA_NULL, 734855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4ERR_PARAMETER, "M4OSA_threadSyncSetOption"); 735855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 736855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(threadContext->coreID != M4OSA_THREAD, 737855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4ERR_BAD_CONTEXT, "M4OSA_threadSyncSetOption"); 738855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 739855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(!M4OSA_OPTION_ID_IS_COREID(optionID, M4OSA_THREAD), 740855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4ERR_BAD_OPTION_ID, "M4OSA_threadSyncSetOption"); 741855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 742855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(!M4OSA_OPTION_ID_IS_WRITABLE(optionID), 743855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4ERR_READ_ONLY, "M4OSA_threadSyncSetOption"); 744855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 745855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 746855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_mutexLock(threadContext->stateMutex, M4OSA_WAIT_FOREVER); 747855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 748855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if(threadContext->state != M4OSA_kThreadOpened) 749855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 750855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_mutexUnlock(threadContext->stateMutex); 751855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 752855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG(M4ERR_STATE, "M4OSA_threadSyncSetOption"); 753855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 754855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4ERR_STATE; 755855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 756855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 757855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi switch(optionID) 758855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 759855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#if(M4OSA_OPTIONID_THREAD_STARTED == M4OSA_TRUE) 760855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /*case M4OSA_ThreadStarted: 761855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 762855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi err_code = M4OSA_SetThreadSyncStarted(context, optionValue); 763855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 764855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi break; 765855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi }*/ 766855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /*M4OSA_OPTIONID_THREAD_STARTED*/ 767855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 768855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#if(M4OSA_OPTIONID_THREAD_STOPPED == M4OSA_TRUE) 769855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /*case M4OSA_ThreadStopped: 770855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 771855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi err_code = M4OSA_SetThreadSyncStopped(context, optionValue); 772855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 773855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi break; 774855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi }*/ 775855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /*M4OSA_OPTIONID_THREAD_STOPPED*/ 776855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 777855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#if(M4OSA_OPTIONID_THREAD_USER_DATA == M4OSA_TRUE) 778855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /*case M4OSA_ThreadUserData: 779855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 780855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi err_code = M4OSA_SetThreadSyncUserData(context, optionValue); 781855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 782855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi break; 783855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi }*/ 784855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /*M4OSA_OPTIONID_THREAD_USER_DATA*/ 785855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 786855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#if(M4OSA_OPTIONID_THREAD_PRIORITY == M4OSA_TRUE) 787855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi case M4OSA_ThreadPriority: 788855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 789855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi err_code = M4OSA_SetThreadSyncPriority(context, optionValue); 790855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 791855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi break; 792855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 793855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /*M4OSA_OPTIONID_THREAD_PRIORITY*/ 794855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 795855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#if(M4OSA_OPTIONID_THREAD_NAME == M4OSA_TRUE) 796855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi case M4OSA_ThreadName: 797855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 798855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi err_code = M4OSA_SetThreadSyncName(context, optionValue); 799855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 800855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi break; 801855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 802855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /*M4OSA_OPTIONID_THREAD_NAME*/ 803855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 804855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#if(M4OSA_OPTIONID_THREAD_STACK_SIZE == M4OSA_TRUE) 805855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi case M4OSA_ThreadStackSize: 806855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 807855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi err_code = M4OSA_SetThreadSyncStackSize(context, optionValue); 808855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 809855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi break; 810855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 811855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /*M4OSA_OPTIONID_THREAD_STACK_SIZE*/ 812855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 813855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi default: 814855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 815855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG(M4ERR_NOT_IMPLEMENTED, "M4OSA_threadSyncSetOption"); 816855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 817855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi err_code = M4ERR_NOT_IMPLEMENTED; 818855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 819855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 820855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 821855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_mutexUnlock(threadContext->stateMutex); 822855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 823855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return err_code; 824855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi} 825855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 826855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 827855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 828855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/** 829855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************ 830855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @brief This method asks the OSAL-Thread to return the value associated 831855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * with the optionID. The caller is responsible for 832855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * allocating/deallocating the memory of the value field. 833855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @note "optionValue" must be cast according to the type related to the 834855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * optionID. 835855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @note As the caller is responsible for de-allocating the "value" 836855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * field, the core OSAL-Thread component must perform a copy of its 837855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * internal value to the value field. 838855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param context:(IN) Context of the thread 839855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param optionID:(IN) ID of the option 840855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param optionValue:(OUT) Value of the option 841855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4NO_ERROR: there is no error 842855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_PARAMETER: at least one parameter is NULL 843855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_BAD_CONTEXT: provided context is not a valid one 844855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_BAD_OPTION_ID: the optionID is not a valid one 845855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_WRITE_ONLY: this option is a write only one 846855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_NOT_IMPLEMENTED: this option is not implemented 847855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************ 848855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/ 849855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSA_ERR M4OSA_threadSyncGetOption(M4OSA_Context context, 850855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_ThreadOptionID optionID, 851855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DataOption* optionValue) 852855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{ 853855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_ThreadContext* threadContext = (M4OSA_ThreadContext*)context; 854855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 855855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE1_3("M4OSA_threadSyncGetOption\t\tM4OSA_Context 0x%x\t" 856855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi "M4OSA_OptionID %d\tM4OSA_DataOption* 0x%x", 857855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi context, optionID, optionValue); 858855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 859855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(context == M4OSA_NULL, 860855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4ERR_PARAMETER, "M4OSA_threadSyncGetOption"); 861855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 862855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(optionID == M4OSA_NULL, 863855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4ERR_PARAMETER, "M4OSA_threadSyncGetOption"); 864855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 865855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(optionValue == M4OSA_NULL, 866855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4ERR_PARAMETER, "M4OSA_threadSyncGetOption"); 867855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 868855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(threadContext->coreID != M4OSA_THREAD, 869855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4ERR_BAD_CONTEXT, "M4OSA_threadSyncGetOption"); 870855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 871855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(!M4OSA_OPTION_ID_IS_COREID(optionID, M4OSA_THREAD), 872855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4ERR_BAD_OPTION_ID, "M4OSA_threadSyncGetOption"); 873855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 874855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(!M4OSA_OPTION_ID_IS_READABLE(optionID), 875855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4ERR_WRITE_ONLY, "M4OSA_threadSyncGetOption"); 876855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 877855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi switch(optionID) 878855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 879855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#if(M4OSA_OPTIONID_THREAD_STARTED == M4OSA_TRUE) 880855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /*case M4OSA_ThreadStarted: 881855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 882855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_ThreadCallBack* startCallBack = (M4OSA_ThreadCallBack*)optionValue; 883855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 884855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *startCallBack = threadContext->startCallBack; 885855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 886855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4NO_ERROR; 887855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi }*/ 888855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /*M4OSA_OPTIONID_THREAD_STARTED*/ 889855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 890855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#if(M4OSA_OPTIONID_THREAD_STOPPED == M4OSA_TRUE) 891855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /*case M4OSA_ThreadStopped: 892855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 893855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_ThreadCallBack* stopCallBack = (M4OSA_ThreadCallBack*)optionValue; 894855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 895855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *stopCallBack = threadContext->stopCallBack; 896855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 897855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4NO_ERROR; 898855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi }*/ 899855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /*M4OSA_OPTIONID_THREAD_STOPPED*/ 900855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 901855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#if(M4OSA_OPTIONID_THREAD_USER_DATA == M4OSA_TRUE) 902855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /*case M4OSA_ThreadUserData: 903855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 904855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_Void** userData = (M4OSA_Void**)optionValue; 905855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 906855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *userData = threadContext->userData; 907855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 908855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4NO_ERROR; 909855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi }*/ 910855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /*M4OSA_OPTIONID_THREAD_USER_DATA*/ 911855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 912855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#if(M4OSA_OPTIONID_THREAD_PRIORITY == M4OSA_TRUE) 913855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi case M4OSA_ThreadPriority: 914855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 915855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_ThreadPriorityLevel* priority = 916855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi (M4OSA_ThreadPriorityLevel*)optionValue; 917855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 918855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *priority = threadContext->priority; 919855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 920855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4NO_ERROR; 921855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 922855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /*M4OSA_OPTIONID_THREAD_PRIORITY*/ 923855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 924855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#if(M4OSA_OPTIONID_THREAD_NAME == M4OSA_TRUE) 925855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi case M4OSA_ThreadName: 926855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 927855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_Char** name = (M4OSA_Char**)optionValue; 928855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 929855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *name = threadContext->name; 930855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 931855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4NO_ERROR; 932855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 933855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /*M4OSA_OPTIONID_THREAD_NAME*/ 934855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 935855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#if(M4OSA_OPTIONID_THREAD_STACK_SIZE == M4OSA_TRUE) 936855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi case M4OSA_ThreadStackSize: 937855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 938855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_UInt32* stackSize = (M4OSA_UInt32*)optionValue; 939855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 940855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *stackSize = threadContext->stackSize; 941855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 942855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4NO_ERROR; 943855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 944855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /*M4OSA_OPTIONID_THREAD_STACK_SIZE*/ 945855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 946855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi default: 947855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi break; 948855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 949855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 950855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG(M4ERR_NOT_IMPLEMENTED, "M4OSA_threadSyncGetOption"); 951855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 952855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4ERR_NOT_IMPLEMENTED; 953855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi} 954855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 955