www.pudn.com > drivers.rar > ffs_pei.c


/*  
+-----------------------------------------------------------------------------  
|  Project :  Riv2Gpf 
|  Modul   :  FFS 
+-----------------------------------------------------------------------------  
|  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 module implements the process body interface 
|             for the entity FFS 
| 
|             Exported functions: 
| 
|             pei_create    - Create the Protocol Stack Entity 
|             pei_init      - Initialize Protocol Stack Entity 
|             pei_primitive - Process Primitive 
|             pei_timeout   - Process Timeout 
|             pei_exit      - Close resources and terminate 
|             pei_run       - Process Primitive 
|             pei_config    - Dynamic Configuration 
|             pei_monitor   - Monitoring of physical Parameters 
|+-----------------------------------------------------------------------------  
*/ 
 
/*============================ Includes ======================================*/ 
 
#include  
#include  
#include  
#include  
#include "typedefs.h" 
#include "vsi.h" 
 
#include "ccdapi.h" 
 
#include "pei.h" 
#include "tok.h" 
 
#include "task.h" 
#include "rvf/rvf_api.h" 
 
#include "rvm/rvm_priorities.h" 
#include "rvm/rvm_use_id_list.h" 
 
#include "ffs/ffs_env.h" 
//#include "ffs/pc/ffs_pc_i.h" 
 
/*============================ Macros ========================================*/ 
#define VSI_CALLER FFS_handle,  
#define pei_create ffs_pei_create 
#define RVM_TRACE_DEBUG_HIGH(string)\ 
	rvf_send_trace (string,(sizeof(string)-1),NULL_PARAM,RV_TRACE_LEVEL_DEBUG_HIGH,RVM_USE_ID ) 
 
/*============================ Global Variables ==============================*/ 
T_HANDLE FFS_handle; 
T_HANDLE ffs_hCommFFS = -1; 
 
LOCAL BOOL first_access = TRUE; 
 
T_FFS_TASK_INFO ffs_task_info; 
 
/*============================ External declaration===========================*/ 
extern void ffs_task_init(T_RVF_MB_ID mbid, T_RVF_ADDR_ID  addr_id); 
 
/*===============global pointer to the error function=========================*/ 
static T_RVM_RETURN (*ffs_error_ft)(T_RVM_NAME swe_name, T_RVM_RETURN error_cause, 
                                    T_RVM_ERROR_TYPE error_type,T_RVM_STRING error_msg); 
 
 
/*============================ Function Definition============================*/ 
/* 
+------------------------------------------------------------------------------ 
| Function    : pei_monitor 
+------------------------------------------------------------------------------ 
| Description : This function is called by the frame in case sudden entity 
|               specific data is requested (e.g. entity Version). 
| 
| Parameters  : out_monitor       - return the address of the data to be 
|                                   monitoredCommunication handle 
| 
| Return      : PEI_OK            - successful (address in out_monitor is valid) 
|               PEI_ERROR         - not successful 
+------------------------------------------------------------------------------ 
*/ 
LOCAL SHORT pei_monitor (void ** out_monitor) 
{ 
  RVM_TRACE_DEBUG_HIGH ("FFS: pei_monitor"); 
 
  return PEI_OK; 
 
} /* End pei_monitor(..) */ 
 
 
/* 
+------------------------------------------------------------------------------ 
| Function    : pei_config 
+------------------------------------------------------------------------------ 
| Description : This function is called by the frame when a primitive is 
|               received indicating dynamic configuration. 
| 
|               This function is not used in this entity. 
| 
|Parameters   :  in_string   - configuration string 
| 
| Return      : PEI_OK            - sucessful 
|               PEI_ERROR         - not successful 
| 
+------------------------------------------------------------------------------ 
*/ 
LOCAL SHORT pei_config (char *inString) 
{ 
  RVM_TRACE_DEBUG_HIGH ("FFS: pei_config"); 
 
  return PEI_OK; 
 
}/* End of pei_config(..) */ 
 
 
/* 
+------------------------------------------------------------------------------ 
|  Function     :  pei_timeout 
+------------------------------------------------------------------------------ 
|  Description  :  Process timeout. 
| 
|  Parameters   :  index     - timer index 
| 
|  Return       :  PEI_OK    - timeout processed 
|                  PEI_ERROR - timeout not processed 
+------------------------------------------------------------------------------ 
*/ 
LOCAL SHORT pei_timeout (unsigned short index) 
{ 
  RVM_TRACE_DEBUG_HIGH ("FFS: pei_timeout"); 
 
  return PEI_OK; 
 
}/* End of pei_timeout(..) */ 
 
 
/* 
+------------------------------------------------------------------------------ 
| Function    : pei_signal 
+------------------------------------------------------------------------------ 
| Description : This function is called by the frame when a signal has been 
|               received. 
| 
| Parameters  : opc               - signal operation code 
|               *data             - pointer to primitive 
| 
| Return      : PEI_OK            - signal processed 
|               PEI_ERROR         - signal not processed 
| 
+------------------------------------------------------------------------------ 
*/ 
LOCAL SHORT pei_signal (ULONG opc, void *data) 
{ 
  RVM_TRACE_DEBUG_HIGH ("FFS: pei_signal"); 
   
  return PEI_OK; 
 
}/* End of pei_signal(..) */ 
 
 
/* 
+------------------------------------------------------------------------------ 
| Function    : pei_exit 
+------------------------------------------------------------------------------ 
| Description : This function is called by the frame when the entity is 
|               terminated. All open resources are freed. 
| 
| Parameters  : - 
| 
| Return      : PEI_OK            - exit successful 
|               PEI_ERROR         - exit not successful 
| 
+------------------------------------------------------------------------------ 
*/ 
LOCAL SHORT pei_exit (void) 
{ 
   RVM_TRACE_DEBUG_HIGH ("FFS: pei_exit"); 
  
   /* 
    * Close communication channels 
    */ 
   vsi_c_close (VSI_CALLER ffs_hCommFFS); 
   ffs_hCommFFS = VSI_ERROR; 
 
   ffs_stop(); 
 
   ffs_kill(); 
  
   return PEI_OK; 
}/* End pei_exit(..) */ 
 
/* 
+------------------------------------------------------------------------------ 
|  Function     :  pei_primitive 
+------------------------------------------------------------------------------ 
|  Description  :  Process protocol specific primitive. 
| 
|  Parameters   :  prim      - pointer to the received primitive 
| 
|  Return       :  PEI_OK    - function succeeded 
|                  PEI_ERROR - function failed 
+------------------------------------------------------------------------------ 
*/ 
LOCAL SHORT pei_primitive (void * primptr) 
{ 
  T_RV_HDR* msg_p; 
 
   RVM_TRACE_DEBUG_HIGH("FFS: pei_primitive"); 
 
   msg_p = (T_RV_HDR*) P2D(primptr); 
    
//   ffs_handle_msg(msg_p); 
 
   return PEI_OK; 
}/* End pei_primitive(..) */ 
 
/* 
+------------------------------------------------------------------------------ 
| Function    : pei_run 
+------------------------------------------------------------------------------ 
| Description : This function is called by the frame when entering the main 
|               loop. This fucntion is only required in the active variant. 
| 
|               This function is not used. 
| 
|  Parameters   :  taskhandle  - handle of current process 
|                  comhandle   - queue handle of current process 
| 
| Return      : PEI_OK            - sucessful 
|               PEI_ERROR         - not successful 
| 
+------------------------------------------------------------------------------ 
*/ 
LOCAL SHORT pei_run (T_HANDLE TaskHandle, T_HANDLE ComHandle) 
{  
  RVM_TRACE_DEBUG_HIGH("FFS: pei_run");    
 
  ffs_start(); 
   
  return PEI_OK; 
   
}/* End pei_run(..) */ 
 
/* 
+------------------------------------------------------------------------------ 
| Function    : pei_init 
+------------------------------------------------------------------------------ 
| Description : This function is called by the frame. It is used to initialise 
|               the entitiy. 
| 
| Parameters  : handle            - task handle 
| 
| Return      : PEI_OK            - entity initialised 
|               PEI_ERROR         - entity not (yet) initialised 
| 
+------------------------------------------------------------------------------ 
*/ 
LOCAL SHORT pei_init (T_HANDLE handle) 
{ 
    T_RV_RET ret = RV_OK; 
     
    RVM_TRACE_DEBUG_HIGH ("FFS: pei_init"); 
 
    /* 
     * Initialize task handle 
     */ 
    FFS_handle = handle; 
    ffs_hCommFFS = -1; 
 
    if(FFS_handle != gsp_get_taskid()) 
    { 
         RVM_TRACE_DEBUG_HIGH("FFS_handle != gsp_get_taskid"); 
    } 
 
    if( gsp_init_remu_task( FFS_handle, "FFS" ) != RVF_OK) 
    { 
         RVM_TRACE_DEBUG_HIGH("gsp_init_remu_task != returning RVF_OK"); 
    } 
 
    /* 
     * Open communication channels 
     */ 
    if (ffs_hCommFFS < VSI_OK) 
    { 
      if ((ffs_hCommFFS = vsi_c_open (VSI_CALLER "FFS" )) < VSI_OK) 
        return PEI_ERROR; 
    } 
    
    RVM_TRACE_DEBUG_HIGH("FFS Open communication channels done");  
   
     
   /* store the pointer to the error function */ 
   ffs_error_ft = rvm_error; 
 
   ffs_task_init(0, ffs_hCommFFS); 
 
   /* Store the address ID. */ 
   ffs_task_info.addr_id = FFS_handle; 
   ffs_task_info.mbid = EXT_MEM_POOL; 
 
    /* Initialise ffs driver */ 
    ffs_init(); 
 
    RVM_TRACE_DEBUG_HIGH("FFS: ffs_init() done");  
 
    return (PEI_OK); 
     
} /* End pei_init(..) */ 
 
/* 
+------------------------------------------------------------------------------ 
| Function    : pei_create 
+------------------------------------------------------------------------------ 
| Description :  This function is called by the frame when the process is 
|                created. 
| 
| Parameters  : out_name          - Pointer to the buffer in which to locate 
|                                   the name of this entity 
| 
| Return      : PEI_OK            - entity created successfuly 
|               PEI_ERROR         - entity could not be created 
| 
+------------------------------------------------------------------------------ 
*/ 
GLOBAL SHORT pei_create (T_PEI_INFO **info) 
{ 
 
static const T_PEI_INFO pei_info = 
              { 
               "FFS",         /* name */ 
               {              /* pei-table */ 
                  pei_init, 
	          pei_exit, 
                  NULL,           /* NO pei_primitive */ 
                  NULL,           /* NO pei_timeout */ 
                  NULL,           /* NO pei_signal */ 
                  pei_run, 
                  NULL,           /* NO pei_config */ 
                  NULL            /* NO pei_monitor */ 
	       }, 
               FFS_STACK_SIZE,            /* stack size */ 
               10,                        /* queue entries */ 
               (255 - RVM_FFS_TASK_PRIORITY),     /* priority (1->low, 255->high) */ 
               0,                         /* number of timers */ 
               COPY_BY_REF|TRC_NO_SUSPEND |  PRIM_NO_SUSPEND  
              }; 
 
 
  RVM_TRACE_DEBUG_HIGH("FFS: pei_create"); 
 
  /* 
   * Close Resources if open 
   */ 
  if (first_access) 
    first_access = FALSE; 
  else 
    pei_exit(); 
 
  /* 
   * Export startup configuration data 
   */ 
  *info = (T_PEI_INFO *) &pei_info; 
   
  return PEI_OK; 
}/* End pei_create(..) */ 
 
 
/* 
+------------------------------------------------------------------------------ 
| Function    : ffs_init 
+------------------------------------------------------------------------------ 
| Description : Called to start the FFS SWE. 
| 
| Parameters  : None 
| 
| Return      : PEI_OK            - successful 
|               PEI_ERROR         - not successful 
+------------------------------------------------------------------------------ 
*/ 
T_RVM_RETURN ffs_init(void) 
{ 
  RVM_TRACE_DEBUG_HIGH("FFS: ffs_init()");    
 
  return RV_OK; 
} 
 
 
/* 
+------------------------------------------------------------------------------ 
| Function    : ffs_start 
+------------------------------------------------------------------------------ 
| Description : Called to start the FFS SWE. 
| 
| Parameters  : None 
| 
| Return      : PEI_OK            - successful 
|               PEI_ERROR         - not successful 
+------------------------------------------------------------------------------ 
*/ 
T_RVM_RETURN ffs_start(void) 
{ 
  RVM_TRACE_DEBUG_HIGH("FFS: ffs_start()");    
 
  ffs_task(); 
   
  return RV_OK; 
} 
 
/* 
+------------------------------------------------------------------------------ 
| Function    : ffs_stop 
+------------------------------------------------------------------------------ 
| Description : Called to stop the FFS SWE. 
| 
| Parameters  : Message 
| 
| Return      : PEI_OK            - successful 
|               PEI_ERROR         - not successful 
+------------------------------------------------------------------------------ 
*/ 
T_RVM_RETURN ffs_stop(void) 
{ 
  /* other SWEs have not been killed yet, ffs can send messages to other SWEs */ 
 
  RVM_TRACE_DEBUG_HIGH("FFS: ffs_stop()");    
 
  return RV_OK; 
} 
 
/* 
+------------------------------------------------------------------------------ 
| Function    : ffs_kill 
+------------------------------------------------------------------------------ 
| Description : Called to stop the FFS SWE. 
| 
| Parameters  : None 
| 
| Return      : PEI_OK            - successful 
|               PEI_ERROR         - not successful 
| 
+------------------------------------------------------------------------------ 
*/ 
T_RVM_RETURN ffs_kill (void) 
{ 
  /* free all memory buffer previously allocated */ 
 
  RVM_TRACE_DEBUG_HIGH("FFS: ffs_kill()");   	 
 
  return RV_OK; 
}