EBO-77/LIN_Stack/transport/lin_j2602tl_api.c

147 lines
3.9 KiB
C
Raw Normal View History

2024-12-23 11:04:44 +08:00
/******************************************************************************
*
* Freescale Semiconductor Inc.
* (c) Copyright 2008-2015 Freescale Semiconductor, Inc.
* ALL RIGHTS RESERVED.
*
******************************************************************************/
/**************************************************************************//**
* @addtogroup j2602tl_api_group
* @{
******************************************************************************/
/**************************************************************************//**
*
* @file lin_j2602tl_api.c
*
* @author FPT Software
*
* @brief J2602 LIN transport layer and configuration functions
*
******************************************************************************/
/******************************************************************************
*
* History:
*
* 20090409 v1.0 First version
*
*****************************************************************************/
/**
* @}
*/
#include "lin_j2602tl_api.h"
#if LIN_MODE == _MASTER_MODE_
#if LIN_PROTOCOL == PROTOCOL_J2602
/** @addtogroup j2602tl_api_group
* @{ */
l_bool ld_is_ready
(
/* [IN] interface name */
l_ifc_handle iii
)
{
lin_configuration const *conf;
/* Get the current configuration */
conf = &lin_ifc_configuration[iii];
/* Check the service status */
if (LD_SERVICE_BUSY == conf->tl_desc->tl_service_status)
{
return 0;
}
return 1;
}
l_u8 ld_check_response
(
/* [IN] interface name */
l_ifc_handle iii,
/* [OUT] buffer for saving the response ID */
l_u8* const RSID,
/* [OUT] buffer for saving the error code */
l_u8* const error_code
)
{
lin_last_cfg_result temp;
lin_configuration const *conf;
lin_tl_descriptor *_tl_desc;
/* Get the current configuration */
conf = &lin_ifc_configuration[iii];
/* Get the TL configuration */
_tl_desc = conf->tl_desc;
/* Get the status of the last service */
temp = (lin_last_cfg_result)(_tl_desc->tl_last_cfg_result);
/* Check status of last configuration */
switch (temp)
{
case LD_SUCCESS:
*RSID = _tl_desc->tl_last_RSID;
break;
case LD_NEGATIVE:
*RSID = _tl_desc->tl_last_RSID;
*error_code = _tl_desc->tl_ld_error_code;
break;
default:
break;
} /* end of switch */
return (l_u8)temp;
}
void ld_assign_frame_id
(
/* [IN] interface name */
l_ifc_handle iii,
/* [IN] initial node address of the target node */
l_u8 initial_NAD,
/* [IN] supplier ID of the target node */
l_u16 supplier_id,
/* [IN] message ID of the target node */
l_u16 message_id,
/* [IN] protected ID of the target node */
l_u8 PID
)
{
lin_tl_pdu_data *lin_tl_pdu;
lin_configuration *conf;
lin_tl_descriptor *tl_conf;
/* Get current configuration */
conf = (lin_configuration *)&lin_ifc_configuration[iii];
/* Get TL configuration */
tl_conf = conf->tl_desc;
/* Get pointer to TX single frame PDU */
lin_tl_pdu = (lin_tl_pdu_data *)tl_conf->tl_tx_single_pdu;
/* check service is busy? */
if (LD_SERVICE_BUSY != tl_conf->tl_service_status)
{
/* Create data for PDU */
(*lin_tl_pdu)[0] = initial_NAD;
(*lin_tl_pdu)[1] = 0x06;
(*lin_tl_pdu)[2] = 0xB1;
(*lin_tl_pdu)[3] = supplier_id &0x00FF;
(*lin_tl_pdu)[4] = (supplier_id >> 8) & 0x00FF;
(*lin_tl_pdu)[5] = message_id &0x00FF;
(*lin_tl_pdu)[6] = (message_id >> 8) & 0x00FF;
(*lin_tl_pdu)[7] = PID;
/* Set state of service is BUSY */
tl_conf->tl_service_status = LD_SERVICE_BUSY;
/* Notify to Master task sending frame */
tl_conf->tl_cnt_to_send = 1;
} /* End of checking service status */
}
/** @} */
#endif /* End (LIN_PROTOCOL == PROTOCOL_J2602) */
#endif /* End LIN_MODE == _MASTER_MODE_ */