2024-07-03 23:12:55 +08:00

452 lines
22 KiB
C

#ifndef __FICOSEKCOM_H
#define __FICOSEKCOM_H
/*-------------------------------- Includes ------------------------------*/
#include "Std_Types.h"
#include "DiagnosticL/Comp_HAL_Autosar_Wrappers/FicosarCAN.h"
#include "OsekCom/OsekCom.h"
/*-------------------------------- Defines -------------------------------*/
/*----------------------------- Data Types -------------------------------*/
typedef UI_8 t_sig_diagnosticreqprndl[8];
typedef UI_8 t_sig_diagnosticfuncaddrreq[8];
#ifndef _FICOSEKCOM_H
#define _FICOSEKCOM_H
/* Type definition of the symbolic names for signals */
typedef UI_16 t_symbolic_name;
typedef UI_16 t_symbolic_frm_name;
/* Return type of the calls OSEK COM */
typedef UI_8 t_status_type;
/* Structure of data type passed by reference in */
/* the calls of OSEK COM */
typedef void *t_application_data_ref;
typedef void *t_length_ref;
/* Flag types of OSEK COM */
//typedef enum {
//COM_FALSE = 0x00, /* Flag down */
// COM_TRUE = 0x01 /* Flag up */
//} t_flag_value;
/* Stop mode of OSEK COM */
//typedef enum {
// COM_SHUTDOWN_IMMEDIATE = 0 /* Apagat immediat */
//} t_com_shutdown_mode_type;
/* Initialize mode of OSEK COM */
//typedef enum {
// COM_NORMAL_MODE = 0 /* No es processen trames de COM de Debug */
//} t_com_application_mode_type;
#endif
/*--------------------------- Global Variables ---------------------------*/
/*----------- Prototypes of Callback Function Provided by User ----------*/
/*---------------------------------------------------------------------------
| Portability: Target platform independent
|----------------------------------------------------------------------------
| Routine description:
| * Notification Callbacks provided by user for class 1 (RxNotif), 3 (RxErrorNotif)
| 2 (TxNotif) and 4 (TxErrorNotif)
| ---------------------------------------------------------------------------
| Parameters description:
/ ------------------------------------------------- -------------------------- */
#define COMCallback(CallbackRoutineName) void CallbackRoutineName(void)
//COMCallback(VCU_RX_Timeout_Callback);
//COMCallback(CGW_BCM_Status1_Timeout_Callback);
COMCallback(SHIFT_Tx_Callback);
COMCallback(SHIFT_Tx_Error_Callback);
/* --------------------------- Routine Prototypes --------------------------- */
/*---------------------------------------------------------------------------
| Portability: Target platform independent
|----------------------------------------------------------------------------
| Routine description:
| * Reception of a new frame notification callback
| * This callback must be launched by the lower COM driver upon the reception
| of a new frame.
|---------------------------------------------------------------------------
| Parameters description:
| bhdl: Handler of the buffer where the received frame is stored.
/---------------------------------------------------------------------------*/
void OsekComRxNotifCallbackPRNDL(t_com_buf_hdl bhdl);
/*---------------------------------------------------------------------------
| Portability: Target platform independent
|----------------------------------------------------------------------------
| Routine description:
| * Available transmission buffer notification callback
| * This callback must be launched by the lower COM driver upon a transmission
| buffer will become available after requesting one to perform a transmission.
|---------------------------------------------------------------------------
| Parameters description:
| return: TRUE in case that after current transmission lower COM driver should
| call again this callback to transmit a new frame.
| FALSE otherwise.
/---------------------------------------------------------------------------*/
BOOL OsekComTxReqCallbackPRNDL(void);
/*---------------------------------------------------------------------------
| Portability: Target platform independent
|----------------------------------------------------------------------------
| Routine description:
| * Frame transmission confirmation notifying callback
| * This callback must be launched by the lower COM driver upon the completion
| of a frame transmission for which transmission confirmation has been requested
|---------------------------------------------------------------------------
| Parameters description:
| bhdl: Handler of the buffer where the transmitted frame is stored.
/---------------------------------------------------------------------------*/
void OsekComTxNotifCallbackPRNDL(t_com_buf_hdl bhdl);
/*---------------------------------------------------------------------------
| Portability: Target platform independent
|----------------------------------------------------------------------------
| Routine description:
| * Service to initialize OsekCom stack
|
| ------------------------------------------------- --------------------------
| Parameters description:
| app_mode: OsekCom initialization mode (See t_com_application_mode_type)
| return: E_OK in case of no errors
| Other (see t_status_type).
/---------------------------------------------------------------------------*/
//t_status_type StartCom(t_com_application_mode_type app_mode);
/*---------------------------------------------------------------------------
| Portability: Target platform independent
|----------------------------------------------------------------------------
| Routine description:
| * Service to inquiry in which mode OsekCom has been initialized.
| * If this service is called before initializing the communications stack
| a random mode will be returned.
| ---------------------------------------------------------------------------
| Parameters description:
| return: OsekCom initialization mode(See t_com_application_mode_type)
/ --------------------------------------------------------------------------- */
//t_com_application_mode_type GetComApplicationMode(void);
/*---------------------------------------------------------------------------
| Portability: Target platform independent
|----------------------------------------------------------------------------
| Routine description:
| * Service to close the OsekCom stack.
| * This service stops the transmission of periodic frames.
| * After calling this service communications could be re-established
| calling again service StartCom.
| * This service does not change the state of any lower COM driver.
| ---------------------------------------------------------------------------
| Parameters description:
| shtdwn_mode: OsekCom stop mode (See t_com_shutdown_mode_type)
| return: E_OK in case of no errors
| Other (see t_status_type).
/ --------------------------------------------------------------------------- */
//t_status_type StopCom(t_com_shutdown_mode_type shtdwn_mode);
/*---------------------------------------------------------------------------
| Portability: Target platform independent
|----------------------------------------------------------------------------
| Routine description:
| * Service to start the transmission of periodic or mixed frames.
| * If this service is re-executed then transmission timers will be re-started.
|---------------------------------------------------------------------------
| Parameters description:
| return: E_OK in case of no errors
| Other (see t_status_type).
/---------------------------------------------------------------------------*/
t_status_type StartPeriodic(void);
/*---------------------------------------------------------------------------
| Portability: Target platform independent
|----------------------------------------------------------------------------
| Routine description:
| * Service to stop the transmission of periodic or mixed frames.
| * To re-start the transmission of periodic or mixed frames service
| StartPeriodic must be called.
|---------------------------------------------------------------------------
| Parameters description:
| return: E_OK in case of no errors
| Other (see t_status_type).
/---------------------------------------------------------------------------*/
t_status_type StopPeriodic(void);
/*---------------------------------------------------------------------------
| Portability: Target platform independent
|----------------------------------------------------------------------------
| Routine description:
| * This service updates the application variable referenced by >data_ref< with
| the data stored in the internal stack for the object identified by >message<.
| * This service will reset the class 1 (RxNotif) and 3 (RxErrorNotif) flags
| associated to >message<
| * If >message< is an enqueued signal the service will return the data
| stored in the internal stack (initial value / last received value / last value
| set with InitMessage)
| If >message< is a queued signal the service will return the first value
| available in the queue or error if the queue is empty. (Mode not supported)
| * The user is responsible of granting that the parameter >data_ref<
| points to a variable correctly allocated and compatible in size with the
| received signal type
| * Usage example:
| t_vehicle_speed vehicle_speed;
| (void)ReceiveMessage(SIG_VEHICLE_SPEED,&vehicle_speed);
|---------------------------------------------------------------------------
| Parameters description:
| message: Identification of the signal to be retrieved.
| data_ref: Pointer to a variable where to store the requested signal.
| return:
| E_OK in case of no errors
| E_COM_ID in case the parameter >message< is out of range or if it refers
| to signal that is sent, dynamic length or zero-length
| E_COM_NOMSG in case the queued signal identified by >message< is empty.
| E_COM_LIMIT in case an overflow of the queue of the signal identified by >message<
| occurred since the last call to ReceiveMessage for >message<.
| E_COM_LIMIT indicates that at least one message has been discarded
| since the message queue filled. Nevertheless the service is
| performed and a message is returned. The service ReceiveMessage
| clears the overflow condition for >message<.
| other (see t_status_type).
/---------------------------------------------------------------------------*/
t_status_type ReceiveMessage(t_symbolic_name message,
t_application_data_ref data_ref);
/*---------------------------------------------------------------------------
| Portability: Target platform independent
|----------------------------------------------------------------------------
| Routine description:
| * This service updates the application variable referenced by >data_ref< with
| the data stored in the internal stack for the object identified by >message<.
| * The length of the received signal data will be placed in the variable
| referenced by >length_ref<.
| * This service will reset the class 1 (RxNotif) and 3 (RxErrorNotif) flags
| associated to >message<
| * This service could be used with enqueued messages only. This service is
| provided for external communication only.
| * The service will return the data stored in the internal stack
| (initial value / last received value / last value set with InitMessage)
| * The user is responsible of granting that the parameters >data_ref<
| and >lenght_ref< point to variables correctly allocated and compatible in
| size with the received signal type
| * Usage example:
| t_vehicle_speed vehicle_speed;
| t_length_ref length_ref;
| (void)ReceiveDynamicMessage(SIG_VEHICLE_SPEED,&vehicle_speed,&length_ref);
|---------------------------------------------------------------------------
| Parameters description:
| message: Identification of the signal to be retrieved.
| data_ref: Pointer to a variable where to store the requested signal.
| lenght_ref: Pointer to a variable where to store the retrieved signal size.
| return:
| E_OK in case of no errors
| E_COM_ID in case the parameter >message< is out of range or if it refers
| to a message that is sent, a queued message, a static-length
| message or a zero-length message.
| other (see t_status_type).
/---------------------------------------------------------------------------*/
t_status_type ReceiveDynamicMessage(t_symbolic_name message,
t_application_data_ref data_ref,
t_length_ref length_ref);
/*---------------------------------------------------------------------------
| Portability: Target platform independent
|----------------------------------------------------------------------------
| Routine description:
| * This service updates OsekCom internal data structure of the signal
| identified by >message< with the data referenced by the variable
| referenced by >data_ref< parameter.
| * This service will reset the class 2 (TxNotif) and 4 (TxErrorNotif) flags
| associated to >message<
| * If >message< has the Triggered Transfer Property, the update will be
| followed by immediate transmission of the I-PDU associated with the signal except
| when the signal is packed into an I-PDU with Periodic Transmission Mode.
| In this case, no transmission is initiated by the call to this service.
| * If >message< has the Pending Transfer Property, no transmission is
| triggered by the usage of this service.
| * The user is responsible of granting that the parameter >data_ref<
| points to a variable correctly allocated and compatible in size with the
| transmitted signal type.
| * Usage example:
| t_vehicle_speed vehicle_speed = 20;
| (void)SendMessage(SIG_VEHICLE_SPEED,&vehicle_speed);
|---------------------------------------------------------------------------
| Parameters description:
| message: Identification of the signal to be transmitted.
| data_ref: Pointer to a variable containing the data to be transmitted.
| return:
| E_OK in case of no errors
| E_COM_ID is case the parameter >message< is out of range or if it refers
| to a message that is received or to a dynamic-length or
| zero-length message.
| other (see t_status_type).
/---------------------------------------------------------------------------*/
#define OSEK_SENDMESSAGE
t_status_type SendMessage(t_symbolic_name message,
t_application_data_ref data_ref);
/*---------------------------------------------------------------------------
| Portability: Target platform independent
|----------------------------------------------------------------------------
| Routine description:
| * This service updates OsekCom internal data structure of the signal
| identified by >message< with the data referenced by variables
| referenced by >data_ref< and >lenght_ref<
| * This service will reset the class 2 (TxNotif) and 4 (TxErrorNotif) flags
| associated to >message<
| * If >message< has the Triggered Transfer Property, the update is followed
| by immediate transmission of the I-PDU associated with the signal except
| when the signal is packed into an I-PDU with Periodic Transmission Mode.
| In this case, no transmission is initiated by the call to this service.
| * If >message< has the Pending Transfer Property, no transmission is
| caused by the usage of this service.
| * This service can be used with enqueued messages only. This service is
| provided for external communication only.
| * The user is responsible of granting that the parameters >data_ref<
| and >lenght_ref< points to variables correctly allocated and
| compatible in size with the transmitted signal type.
| * Usage example:
| t_vehicle_speed vehicle_speed = 20;
| t_length_ref length_ref = 1;
| (void)SendDynamicMessage(SIG_VEHICLE_SPEED, &vehicle_speed, &length_ref);
|---------------------------------------------------------------------------
| Parameters description:
| message: Identification of the signal to be transmitted.
| data_ref: Pointer to a variable containing the data to be transmitted.
| lenght_ref: Pointer to a variable containing the size of the signal
| to be transmitted.
| return:
| E_OK in case of no errors
| E_COM_ID in case the parameter >message< is out of range or if it refers
| to a received signal, a static-length signal or a zero-length signal.
| E_COM_LENGTH in case the value to which >length_ref< points is not within
| the range 0 to the maximum length defined for >message<.
| other (see t_status_type).
/---------------------------------------------------------------------------*/
#define OSEK_SENDDYNAMICMESSAGE
t_status_type SendDynamicMessage(t_symbolic_name message,
t_application_data_ref data_ref,
t_length_ref length_ref);
/*---------------------------------------------------------------------------
| Portability: Target platform independent
|----------------------------------------------------------------------------
| Routine description:
| * This service updates OsekCom internal data structure of the signal
| identified by >message< with the data referenced by the variable
| referenced by >data_ref<
| * This service will not reset any class flags associated to >message<
| * This service will not initiate any transmission.
| * The user is responsible of granting that the parameter 'data_ref'
| points to an address correctly allocated and compatible in size with the
| transmitted signal type.
|---------------------------------------------------------------------------
| Parameters description:
| message: Identification of the signal.
| data_ref: Pointer to a variable containing the data.
| return:
| E_OK in case of no errors
| E_COM_ID if the message or signal to initialize don't exist
| Other (see t_status_type).
/---------------------------------------------------------------------------*/
t_status_type InitMessage(t_symbolic_name message,
t_application_data_ref data_ref);
/*---------------------------------------------------------------------------
| Portability: Target platform independent
|----------------------------------------------------------------------------
| Routine description:
| * Consult service for the flag of COM traffic.
|---------------------------------------------------------------------------
| Parameters description:
| return:
| COM_FALSE if has not been detected any communication activity since
| last clear
| COM_TRUE if has been detected communication activity since last clear
/---------------------------------------------------------------------------*/
t_flag_value ReadFlagComTrafficPRNDL(void);
/*---------------------------------------------------------------------------
| Portability: Target platform independent
|----------------------------------------------------------------------------
| Routine description:
| * Reset service for the flag of COM traffic.
|---------------------------------------------------------------------------
| Parameters description:
/---------------------------------------------------------------------------*/
void ResetFlagComTrafficPRNDL(void);
/*---------------------------------------------------------------------------
| Portability: Target platform independent
|----------------------------------------------------------------------------
| Routine description:
| * Consult service to retrieve the state of class 1 (RxNotif),
| class 3 (Rx_ErrorNotif), class 2 (TxNotif) and class 4 (Tx_ErrorNotif) flags
|---------------------------------------------------------------------------
| Parameters description:
| message: Identification of the signal.
| return:
| COM_FALSE if the flag is down
| COM_TRUE if the flag is up
/---------------------------------------------------------------------------*/
t_flag_value ReadFlagRxSig(t_symbolic_name message);
t_flag_value ReadFlagTxSig(t_symbolic_name message);
t_flag_value ReadFlagTxSigDiagnosticRespPRNDL(void);
t_flag_value ReadFlagTxErrorSig(t_symbolic_name message);
t_flag_value ReadFlagTxErrorSigDiagnosticRespPRNDL(void);
/*---------------------------------------------------------------------------
| Portability: Target platform independent
|----------------------------------------------------------------------------
| Routine description:
| * Consult service to enable tx message flag
|---------------------------------------------------------------------------
| Parameters description:
/---------------------------------------------------------------------------*/
void EnableTxFrm_diag_physresp_prndl(void);
void DisableTxFrm_diag_physresp_prndl(void);
void EnableTxFrm_shiftselectposition(void);
void DisableTxFrm_shiftselectposition(void);
/*---------------------------------------------------------------------------
| Portability: Target platform independent
|----------------------------------------------------------------------------
| Routine description:
| * Reset service for the notify class 1 (RxNotif) class 3 (RxErrorNotif)
| class 2 (TxNotif) and class 4 (TxErrorNotif)
|---------------------------------------------------------------------------
| Parameters description:
| message: Identification of the signal.
/---------------------------------------------------------------------------*/
void ResetFlagRxSig(t_symbolic_name message);
//void ResetFlagRxSigDiagnosticReqSWTL(void);
void ResetFlagRxSigDiagnosticFuncAddrReq(void);
void ResetFlagTxSig(t_symbolic_name message);
void ResetFlagTxErrorSig(t_symbolic_name message);
void ResetFlagTxErrorSigDiagnosticRespSWTL(void);
/*---------------------------------------------------------------------------
| Portability: Target platform independent
|----------------------------------------------------------------------------
| Routine description:
| * Main runnable of the OsekCom stack intended to be called periodically by
| the system scheduler with a period equal to FICOSEK_COM_TASK_TICKS
|---------------------------------------------------------------------------
| Parameters description:
/---------------------------------------------------------------------------*/
void OsekComTask(void);
#endif