FreeCalypso > hg > fc-magnetite
diff src/gpf3/frame/esf_func.c @ 2:c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 25 Sep 2016 23:52:50 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/gpf3/frame/esf_func.c Sun Sep 25 23:52:50 2016 +0000 @@ -0,0 +1,295 @@ +/* ++------------------------------------------------------------------------------ +| File: esf_func.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 : This Modul defines the ESF interface functions. ++----------------------------------------------------------------------------- +*/ + + + +#ifndef __ESF_FUNC_C__ +#define __ESF_FUNC_C__ +#endif + +#undef TEST_ESF_REGISTER + +/*==== INCLUDES ===================================================*/ + +#ifdef _NUCLEUS_ + /* the include of nucleus.h in this file is a dirty hack to mask the + issue of different type definitions in typedefs.h nad nucleus.h. + typedefs.h contains #if defined (NUCLEUS) to protect against + double definition and must be included after nucleus.h + */ + #include "nucleus.h" +#endif +#include "typedefs.h" +#include "glob_defs.h" +#include "vsi.h" +#include "os.h" +#include "os_types.h" +#include "header.h" +#include "esf_func.h" +#include "string.h" +#include "stdio.h" + +/*==== TYPES ======================================================*/ + + +/*==== CONSTANTS ==================================================*/ + + +/*==== EXTERNALS ==================================================*/ + +#ifdef FF_OS_ONLY + extern char esf_pool[]; + extern int esf_pool_size; +#endif + +/*==== VARIABLES ==================================================*/ + +#ifndef RUN_INT_RAM + T_ESF_FUNC esf_func; +#ifdef FF_OS_ONLY + OS_HANDLE esf_pool_handle; +#endif +#else + extern T_ESF_FUNC esf_func; + extern void esf_register ( T_ESF_FUNC * func ); +#endif + +/*==== LINT =======================================================*/ + + +/*==== FUNCTIONS ==================================================*/ + +#ifdef TEST_ESF_REGISTER + +#ifndef RUN_INT_RAM +void init_func1 ( void ) +{ +#ifndef _TARGET_ + printf ("%s\n","ESF inif_func1 called"); +#endif +} +#endif + +#ifndef RUN_INT_RAM +void init_func2 ( void ) +{ +#ifndef _TARGET_ + printf ("%s\n","ESF inif_func2 called"); +#endif +} +#endif + +#ifndef RUN_INT_RAM +void send_prim ( T_PRIM_HEADER * prim ) +{ +#ifndef _TARGET_ + printf ("%s\n","ESF send_prim called"); +#endif +} +#endif + +#ifndef RUN_INT_RAM +T_ESF_FUNC esf_functions = +{ +ESF_INITIALIZED, +init_func1, +init_func2, +send_prim +}; +#endif + +#endif + +#ifdef FF_OS_ONLY +#ifndef RUN_INT_RAM +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-Frame (8415) MODULE : OS_FRM | +| STATE : code ROUTINE : esf_task_entry | ++--------------------------------------------------------------------+ + + PURPOSE : entry function for the ESF helping task. + +*/ + +GLOBAL void esf_task_entry (OS_HANDLE TaskHandle, ULONG Value) +{ + /* call second ESF init function */ + esf_init_func2(); + + /* suspend helping task forever */ + for(;;) + { + os_SuspendTask(TaskHandle,10000); + } +} +#endif + +#ifndef RUN_INT_RAM +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-Frame (8415) MODULE : OS_FRM | +| STATE : code ROUTINE : StartFrame | ++--------------------------------------------------------------------+ + + PURPOSE : this is called by ESF. + +*/ +SHORT StartFrame ( void ) +{ +OS_HANDLE esf_task_handle; + + os_Initialize(); + + /* set the OS tick to 10ms */ + os_set_tick(SYSTEM_TICK_10_MS); + + /* create memory pool for temporary usage during ESF partition pool creation and HISR stacks */ + os_CreateMemoryPool (OS_NOTASK, "ESF_POOL", &esf_pool, esf_pool_size, &esf_pool_handle); + + /* tell this pool handle to the OS layer */ + os_SetPoolHandles (esf_pool_handle, esf_pool_handle); + + /* create a helping task that calls esf_init2() from task context */ + os_CreateTask (OS_NOTASK, "ESF_TASK", esf_task_entry, 1024, 255, &esf_task_handle, esf_pool_handle); + + /* and start it */ + os_StartTask (OS_NOTASK, esf_task_handle, 0); + + esf_init(); + /* call fist ESF init function */ + esf_init_func1(); + + return OS_OK; + +} +#endif +#endif /* FF_OS_ONLY */ + +#ifndef RUN_INT_RAM +/* ++------------------------------------------------------------------------------ +| Function : esf_init ++------------------------------------------------------------------------------ +| Description : initialize ESF API function pointer table. +| +| Parameters : void +| +| Return : void ++------------------------------------------------------------------------------ +*/ +void esf_init ( void ) +{ +#ifdef TEST_ESF_REGISTER + esf_register ( &esf_functions ); +#endif + if ( esf_func.magic_nr != ESF_INITIALIZED ) + { + esf_func.init_func1 = NULL; + esf_func.init_func2 = NULL; + esf_func.send_prim = NULL; + } +} +#endif + + +#ifndef RUN_INT_RAM +/* ++------------------------------------------------------------------------------ +| Function : esf_register ++------------------------------------------------------------------------------ +| Description : register the ESF API functions. +| +| Parameters : func - pointer to API function pointer table +| +| Return : void ++------------------------------------------------------------------------------ +*/ +void esf_register ( T_ESF_FUNC * func ) +{ + esf_func.init_func1 = func->init_func1; + esf_func.init_func2 = func->init_func2; + esf_func.send_prim = func->send_prim; + esf_func.magic_nr = ESF_INITIALIZED; +} +#endif + +#ifndef RUN_INT_RAM +/* ++------------------------------------------------------------------------------ +| Function : esf_init_func1 ++------------------------------------------------------------------------------ +| Description : call first ESF init function +| +| Parameters : void +| +| Return : void ++------------------------------------------------------------------------------ +*/ +void esf_init_func1 ( void ) +{ + if ( esf_func.init_func1 != NULL ) + { + esf_func.init_func1 (); + } +} +#endif + +#ifndef RUN_INT_RAM +/* ++------------------------------------------------------------------------------ +| Function : esf_init_func2 ++------------------------------------------------------------------------------ +| Description : call second ESF init function +| +| Parameters : void +| +| Return : void ++------------------------------------------------------------------------------ +*/ +void esf_init_func2 ( void ) +{ + if ( esf_func.init_func2 != NULL ) + { + esf_func.init_func2 (); + } +} +#endif + +#ifndef RUN_FLASH +/* ++------------------------------------------------------------------------------ +| Function : esf_send_prim ++------------------------------------------------------------------------------ +| Description : call ESF send primitive function +| +| Parameters : void +| +| Return : void ++------------------------------------------------------------------------------ +*/ +void esf_send_prim ( T_PRIM_HEADER * prim ) +{ + if ( esf_func.send_prim != NULL ) + { + esf_func.send_prim ( prim ); + } +} +#endif +