FreeCalypso > hg > freecalypso-sw
diff gsm-fw/ccd/ccd_store.c @ 648:970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
author | Michael Spacefalcon <msokolov@ivan.Harhan.ORG> |
---|---|
date | Thu, 04 Sep 2014 05:48:57 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gsm-fw/ccd/ccd_store.c Thu Sep 04 05:48:57 2014 +0000 @@ -0,0 +1,332 @@ +/* ++----------------------------------------------------------------------------- +| Project : +| Modul : ccd_store.c ++----------------------------------------------------------------------------- +| Copyright 2004 Texas Instruments Deutschland, GmbH +| 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 : CCD - Definition of store handling routines ++----------------------------------------------------------------------------- +*/ + +#define CCD_STO_C + +#include <stdio.h> +#include <stdlib.h> +#include <stdarg.h> +#include <string.h> +#include <setjmp.h> + +/* + * Standard definitions like UCHAR, ERROR etc. + */ +#include "typedefs.h" +#include "header.h" + +/* + * Types and constants used by CCD + */ +#include "ccd_globs.h" + +/* + * Type definitions for CCD data tables + */ +#include "ccdtable.h" + +/* + * Function prototypes of CCD-CCDDATA interface + */ +#include "ccddata.h" + +/* + * Prototypes of ccd internal functions + */ +#include "ccd.h" + + +extern T_CCD_TASK_TABLE* ccd_task_list[]; + +#ifndef RUN_INT_RAM +/* Attention for RUN_...: static function */ +/* ++------------------------------------------------------------------------------ +| Function : ccd_store_alloc ++------------------------------------------------------------------------------ +| Description : This function allocates a the entity's store entry and +| set its next pointer to 0. +| The members of the entry must not reset with each +| coding/decoding action. +| +| Parameters : - +| +| Return : pointer to struct of type T_CCD_STORE_LIST ++------------------------------------------------------------------------------ +*/ +static T_CCD_STORE_LIST* ccd_store_alloc () +{ + T_CCD_STORE_LIST* stoentry; + int i; +#if defined (CCD_TEST) + stoentry = malloc (sizeof(T_CCD_STORE_LIST)); +#else + stoentry = D_ALLOC (sizeof(T_CCD_STORE_LIST)); +#endif + /* for future use to extend register capacity */ + /* stoentry->next = NULL */ + if (stoentry) + { + for (i = 0; i < 3; i++) + { + stoentry->store[i] = 0; + } + /* for future use to extend register capacity */ + /* (*stoentry)->next = NULL */ + } + return stoentry; +} +#endif /* !RUN_INT_RAM */ + +#ifndef RUN_INT_RAM +/* ++------------------------------------------------------------------------------ +| Function : ccd_store_init ++------------------------------------------------------------------------------ +| Description : This function initializes the entity's store entry +| +| Parameters : eentry - pointing to the entity's error entry +| +| Return : 1 in case of error, 0 otherwise ++------------------------------------------------------------------------------ +*/ +int ccd_store_init (T_CCD_STORE_LIST** stoentry) +{ + if (!*stoentry) + { +#if defined (CCD_TEST) + *stoentry = malloc (sizeof(T_CCD_STORE_LIST)); +#else + *stoentry = D_ALLOC (sizeof(T_CCD_STORE_LIST)); +#endif + } + if (*stoentry) + { + int i; + for (i = 0; i < 3; i++) + { + (*stoentry)->store[i] = 0; + } + /* for future use to extend register capacity */ + /* (*stoentry)->next = NULL */ + return 0; + } + return 1; +} +#endif /* !RUN_INT_RAM */ + +#ifndef RUN_INT_RAM +/* ++------------------------------------------------------------------------------ +| Function : ccd_store_exit ++------------------------------------------------------------------------------ +| Description : This function frees the task related store entry in +| ccd_task_list. +| +| Parameters : - +| +| Return : - ++------------------------------------------------------------------------------ +*/ +void ccd_store_exit (void) +{ + T_CCD_STORE_LIST** entry; +#if defined (CCD_TEST) + entry = &ccd_task_list[0]->ccd_store; + if (*entry) + { + /* for future use: This function frees the task related store list in case */ + /* of extended register capacity */ + /* ccd_sto_free(*stoentry); */ + free (*entry); + } +#else + T_HANDLE me = vsi_e_handle (0, NULL); + if (me == VSI_ERROR) + me = 0; + entry = &ccd_task_list[me]->ccd_store; + if (*entry) + { + /* for future use: This function frees the task related store list in case */ + /* of extended register capacity */ + /* ccd_sto_free(*stoentry); */ + D_FREE (*entry); + } +#endif + *entry = 0; +} +#endif /* !RUN_INT_RAM */ + +#ifndef RUN_INT_RAM +/* ++------------------------------------------------------------------------------ +| Function : ccd_writeStore ++------------------------------------------------------------------------------ +| Description : This function copies information to the register +| retaining its entries after CCD actions are finished. +| +| Parameters : globs - the current variable set +| regNo - to select one of the CCD STORE Registers +| value - information to write to CCD STORE Register +| +| Return : 1 in case of error, 0 otherwise ++------------------------------------------------------------------------------ +*/ + +UBYTE ccd_writeStore (T_CCD_Globs *globs, ULONG regNo, ULONG value) +{ + T_CCD_STORE_LIST* it; +/* +#if defined (CCD_TEST) + it = ccd_task_list[0]->ccd_store; +#else + T_HANDLE me = vsi_e_handle (0, NULL); + if (me == VSI_ERROR) + me = 0; + it = ccd_task_list[me]->ccd_store; +#endif +*/ + it = ccd_task_list[globs->me]->ccd_store; + +#ifdef DEBUG_CCD + TRACE_CCD (globs, "Writing %x to STO[%d] ", value, regNo); +#endif + + if (regNo < 3) + { + if (!it) + { + it = ccd_store_alloc (); + } + + if (it) + { + it->store[regNo] = value; + } + + else + { + /* Memory allocation failed */ +#ifdef DEBUG_CCD + TRACE_CCD (globs, "Memory allocation failed!"); +#endif + return 1; + } + } + + else + { + /* for future use: extended register capacity requested */ +#ifdef DEBUG_CCD + TRACE_CCD (globs, "Invalid register number STO[%d] ", regNo); +#endif + return 1; + } + + return 0; +} +#endif /* !RUN_INT_RAM */ + +#ifndef RUN_INT_RAM +/* ++------------------------------------------------------------------------------ +| Function : ccd_setStore ++------------------------------------------------------------------------------ +| Description : This function copies information from the user to the CCD +| STORE Register. It retains its entries after CCD actions +| are finished. +| +| Parameters : regNo - to select one of the CCD STORE Registers +| value - information to write to CCD STORE Register +| +| Return : 1 in case of error, 0 otherwise ++------------------------------------------------------------------------------ +*/ + +UBYTE ccd_setStore ( ULONG regNo, ULONG value) +{ + T_CCD_Globs* entry; +#if defined (CCD_TEST) + entry = ccd_task_list[0]->ccd_globs; +#else + T_HANDLE me = vsi_e_handle (0, NULL); + if (me == VSI_ERROR) + me = 0; + entry = ccd_task_list[me]->ccd_globs; + entry->me = me; +#endif + + return ccd_writeStore (entry, regNo, value); +} +#endif /* !RUN_INT_RAM */ + +#ifndef RUN_INT_RAM +/* ++------------------------------------------------------------------------------ +| Function : ccd_getStore ++------------------------------------------------------------------------------ +| Description : This function reads information from the CCD STORE Register +| and provides it to CCD. +| (CCD STORE Register retains its entries after CCD actions +| are finished.) +| +| Parameters : globs - the current variable set +| regNo - to select one of the CCD STORE Registers +| value - information to write to CCD STORE Register +| +| Return : 1 in case of error, 0 otherwise ++------------------------------------------------------------------------------ +*/ + +UBYTE ccd_getStore (T_CCD_Globs *globs, ULONG regNo, ULONG *value) +{ + T_CCD_STORE_LIST* it = ccd_task_list[globs->me]->ccd_store; + +#ifdef DEBUG_CCD + TRACE_CCD (globs, "Reading from STO[%d] ", regNo); +#endif + + if (regNo < 3) + { + if (it) + { + *value = it->store[regNo]; + } + else + { +#ifdef DEBUG_CCD + TRACE_CCD (globs, "No CCD STORE Register persent!"); +#endif + return 1; + } + } + + else + { + /* for future use: extended register capacity requested */ +#ifdef DEBUG_CCD + TRACE_CCD (globs, "Invalid register number STO[%d] ", regNo); +#endif + return 1; + } + + return 0; +} +#endif /* !RUN_INT_RAM */