FreeCalypso > hg > tcs211-l1-reconst
diff g23m/condat/com/src/comlib/cl_shrd.c @ 0:509db1a7b7b8
initial import: leo2moko-r1
author | Space Falcon <falcon@ivan.Harhan.ORG> |
---|---|
date | Mon, 01 Jun 2015 03:24:05 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/g23m/condat/com/src/comlib/cl_shrd.c Mon Jun 01 03:24:05 2015 +0000 @@ -0,0 +1,262 @@ +/* ++----------------------------------------------------------------------------- +| Project : COMLIB +| Modul : cl_shrd.c ++----------------------------------------------------------------------------- +| Copyright 2002 Texas Instruments Berlin, AG +| All rights reserved. +| +| This file is confidential and a trade secret of Texas +| Instruments Berlin, AG +| The receipt of or possession of this file does not convey +| any rights to reproduce or disclose its contents or to +| manufacture, use, or sell anything it may describe, in +| whole, or in part, without the specific written consent of +| Texas Instruments Berlin, AG. ++----------------------------------------------------------------------------- +| Purpose : Definitions of common library functions: Implementation of + creation of Semaphores and usage of it by any entity in + PS ++----------------------------------------------------------------------------- +*/ +/* + * Version 1.0 + */ + +/**********************************************************************************/ + +/* +NOTE: +*/ + +/**********************************************************************************/ +#ifndef CL_SHRD_C +#define CL_SHRD_C +/*==== INCLUDES ===================================================*/ + +#include <string.h> +#include <stdio.h> +#include "typedefs.h" +#include "vsi.h" +#include "cl_shrd.h" + +/*==== VARIABLES ==================================================*/ + +static T_HANDLE cl_handle; + +#ifdef OPTION_MULTITHREAD +#define VSI_CALLER cl_handle, +#else +#define VSI_CALLER +#endif + +/* Pointer is used for faster memory access */ +static T_SHRD_DATA shrd_data_base; +T_SHRD_DATA *shared_data = &shrd_data_base; + +static T_HANDLE sem_SHARED = VSI_ERROR; +static BOOL is_initialized = FALSE; + +/*==== FUNCTIONS ==================================================*/ + +/* ++--------------------------------------------------------------------------------- +| Function : cl_shrd_init ++--------------------------------------------------------------------------------- +| Description : Opens counting semaphore specified by its name. +| If semaphore doesnot exists, creates semaphore with count given. +| +| Parameters : T_HANDLE +| +| Return : void +| ++--------------------------------------------------------------------------------- +*/ +GLOBAL void cl_shrd_init (T_HANDLE handle) +{ + TRACE_FUNCTION ("cl_shrd_init()"); + + if(is_initialized NEQ TRUE) + { + cl_handle = handle; + + memset(shared_data, 0, sizeof(T_SHRD_DATA)); + sem_SHARED = vsi_s_open (VSI_CALLER "SHARED_SEM",1); + + if (sem_SHARED NEQ VSI_ERROR) + { + TRACE_EVENT ("Semaphore opened successfully \"SHARED_SEM\""); + is_initialized = TRUE; + } + else + TRACE_EVENT ("Cant open semaphore \"SHARED_SEM\""); + } +} + +/* ++------------------------------------------------------------------------------ +| Function : cl_shrd_exit ++------------------------------------------------------------------------------ +| Description : Close the semaphore. +| +| Parameters : void +| +| Return : void +| ++------------------------------------------------------------------------------ +*/ + +GLOBAL void cl_shrd_exit (void) +{ + TRACE_FUNCTION ("cl_shrd_exit()"); + if(is_initialized EQ TRUE) + { + if (sem_SHARED NEQ VSI_ERROR) + vsi_s_close (VSI_CALLER sem_SHARED); + + memset(shared_data, 0, sizeof(T_SHRD_DATA)); + is_initialized = FALSE; + } +} + +/* ++------------------------------------------------------------------------------ +| Function : cl_shrd_get_loc ++------------------------------------------------------------------------------ +| Description : Copies the content from global T_LOC_INFO to the +| passed parameter +| +| Parameters : <loc_info>: Location information +| +| Return : void +| ++------------------------------------------------------------------------------ +*/ + +GLOBAL BOOL cl_shrd_get_loc (T_LOC_INFO *loc_info) +{ + BOOL ret = FALSE; + TRACE_FUNCTION ("cl_shrd_get_loc()"); + + if (sem_SHARED NEQ VSI_ERROR) + { + if (vsi_s_get (VSI_CALLER sem_SHARED) EQ VSI_OK) + { + if ( loc_info NEQ NULL ) + memcpy(loc_info, &shared_data->location_info, sizeof(T_LOC_INFO)); + vsi_s_release (VSI_CALLER sem_SHARED); + ret = TRUE; + } + else + { + TRACE_EVENT ("Semaphore not free or Invalid handle \"sem_SHARED\""); + return(ret); + } + } + return(ret); +} + +/* ++------------------------------------------------------------------------------ +| Function : cl_shrd_set_loc ++------------------------------------------------------------------------------ +| Description : Copies the content from passed parameter to the +| global structure +| +| Parameters : <loc_info>: Location information +| +| Return : void +| ++------------------------------------------------------------------------------ +*/ + +GLOBAL void cl_shrd_set_loc (T_LOC_INFO *loc_info) +{ + TRACE_FUNCTION ("cl_shrd_set_loc()"); + + if (sem_SHARED NEQ VSI_ERROR) + { + if (vsi_s_get (VSI_CALLER sem_SHARED) EQ VSI_OK) + { + if ( loc_info NEQ NULL ) + memcpy(&shared_data->location_info, loc_info, sizeof(T_LOC_INFO)); + vsi_s_release (VSI_CALLER sem_SHARED); + } + else + { + TRACE_EVENT ("Semaphore not free or Invalid handle \"sem_SHARED\""); + } + } +} + +/* ++------------------------------------------------------------------------------ +| Function : cl_shrd_get_tim_adv ++------------------------------------------------------------------------------ +| Description : Copies the content from global T_TIM_ADV to the +| passed parameter +| +| Parameters : <tim_adv>: Timing Advance and ME status. +| +| Return : void +| ++------------------------------------------------------------------------------ +*/ + +GLOBAL BOOL cl_shrd_get_tim_adv (T_TIM_ADV *tim_adv) +{ + BOOL ret = FALSE; + TRACE_FUNCTION ("cl_shrd_get_tim_adv()"); + + if (sem_SHARED NEQ VSI_ERROR) + { + if (vsi_s_get (VSI_CALLER sem_SHARED) EQ VSI_OK) + { + if ( tim_adv NEQ NULL ) + memcpy(tim_adv, &shared_data->timing_advance, sizeof(T_TIM_ADV)); + vsi_s_release (VSI_CALLER sem_SHARED); + ret = TRUE; + } + else + { + TRACE_EVENT ("Semaphore not free or Invalid handle \"sem_SHARED\""); + return(ret); + } + } + return(ret); +} + +/* ++------------------------------------------------------------------------------ +| Function : cl_shrd_set_tim_adv ++------------------------------------------------------------------------------ +| Description : Copies the content from passed parameter to the +| global structure +| +| Parameters : <tim_adv>: Timing Advance and ME status. +| +| Return : void +| ++------------------------------------------------------------------------------ +*/ + +GLOBAL void cl_shrd_set_tim_adv (T_TIM_ADV *tim_adv) +{ + TRACE_FUNCTION ("cl_shrd_set_tim_adv()"); + + if (sem_SHARED NEQ VSI_ERROR) + { + if (vsi_s_get (VSI_CALLER sem_SHARED) EQ VSI_OK) + { + if ( tim_adv NEQ NULL ) + memcpy(&shared_data->timing_advance, tim_adv, sizeof(T_TIM_ADV)); + vsi_s_release (VSI_CALLER sem_SHARED); + } + else + { + TRACE_EVENT ("Semaphore not free or Invalid handle \"sem_SHARED\""); + } + } +} + +#endif /* CL_SHRD_C */ \ No newline at end of file