* General requirements\r
*/\r
/** @req DCM054.Partially */ /** @req DCM055.Partially */ /** @req DCM110 */ /** @req DCM107 */ /** @req DCM332 */\r
-/** @req DCM012 */ /** @req DCM044 */ /** @req DCM364 */ /** @req DCM040 */ /** @req DCM041 */\r
+/** @req DCM012 */ /** @req DCM044 */ /** @req DCM364 */ /** @req DCM041 */\r
/** @req DCM042 */ /** @req DCM049 */\r
/** @req DCM033 */\r
/** @req DCM171 */\r
/** @req DCM333 */ /** @req DCM334 */\r
/** @req DCM048 */\r
+ /** @req DCM040.Uninit */\r
+ /** @req DCM040.Param */\r
+ /** @req DCM043 */\r
+ /** @req DCM048 */\r
\r
#include <string.h>\r
#include "Dcm.h"\r
*/\r
void Dcm_MainFunction(void) /** @req DCM362 */\r
{\r
+ VALIDATE_NO_RV(dcmState == DCM_INITIALIZED, DCM_MAIN_ID, DCM_E_UNINIT);\r
+\r
DsdMain();\r
DspMain();\r
DslMain();\r
{\r
BufReq_ReturnType returnCode = BUFREQ_OK;\r
\r
+ VALIDATE_RV(dcmState == DCM_INITIALIZED, DCM_PROVIDE_RX_BUFFER_ID, DCM_E_UNINIT, BUFREQ_NOT_OK);\r
+ VALIDATE_RV(dcmRxPduId < DCM_DSL_RX_PDU_ID_LIST_LENGTH, DCM_PROVIDE_RX_BUFFER_ID, DCM_E_PARAM, BUFREQ_NOT_OK);\r
+\r
returnCode = DslProvideRxBufferToPdur(dcmRxPduId, tpSduLength, (const PduInfoType**)pduInfoPtr);\r
\r
return returnCode;\r
\r
void Dcm_RxIndication(PduIdType dcmRxPduId, NotifResultType result)\r
{\r
+ VALIDATE_NO_RV(dcmState == DCM_INITIALIZED, DCM_RX_INDICATION_ID, DCM_E_UNINIT);\r
+ VALIDATE_NO_RV(dcmRxPduId < DCM_DSL_RX_PDU_ID_LIST_LENGTH, DCM_RX_INDICATION_ID, DCM_E_PARAM);\r
+\r
DslRxIndicationFromPduR(dcmRxPduId, result);\r
}\r
\r
{\r
Std_ReturnType returnCode = E_OK;\r
\r
+ VALIDATE_RV(dcmState == DCM_INITIALIZED, DCM_GET_ACTIVE_PROTOCOL_ID, DCM_E_UNINIT, E_NOT_OK);\r
+\r
returnCode = DslGetActiveProtocol(protocolId);\r
\r
return returnCode;\r
{\r
Std_ReturnType returnCode = E_OK;\r
\r
+ VALIDATE_RV(dcmState == DCM_INITIALIZED, DCM_GET_SECURITY_LEVEL_ID, DCM_E_UNINIT, E_NOT_OK);\r
+\r
returnCode = DslGetSecurityLevel(secLevel);\r
\r
return returnCode;\r
{\r
Std_ReturnType returnCode = E_OK;\r
\r
+ VALIDATE_RV(dcmState == DCM_INITIALIZED, DCM_GET_SES_CTRL_TYPE_ID, DCM_E_UNINIT, E_NOT_OK);\r
+\r
returnCode = DslGetSesCtrlType(sesCtrlType);\r
\r
return returnCode;\r
{\r
BufReq_ReturnType returnCode = BUFREQ_OK;\r
\r
+ VALIDATE_RV(dcmState == DCM_INITIALIZED, DCM_PROVIDE_TX_BUFFER_ID, DCM_E_UNINIT, BUFREQ_NOT_OK);\r
+ VALIDATE_RV(dcmTxPduId < DCM_DSL_TX_PDU_ID_LIST_LENGTH, DCM_PROVIDE_TX_BUFFER_ID, DCM_E_PARAM, BUFREQ_NOT_OK);\r
+\r
returnCode = DslProvideTxBuffer(dcmTxPduId, (const PduInfoType**)pduInfoPtr, length);\r
\r
return returnCode;\r
\r
void Dcm_TxConfirmation(PduIdType dcmTxPduId, NotifResultType result)\r
{\r
+ VALIDATE_NO_RV(dcmState == DCM_INITIALIZED, DCM_TX_CONFIRMATION_ID, DCM_E_UNINIT);\r
+ VALIDATE_NO_RV(dcmTxPduId < DCM_DSL_TX_PDU_ID_LIST_LENGTH, DCM_TX_CONFIRMATION_ID, DCM_E_PARAM);\r
+\r
DslTxConfirmation(dcmTxPduId, result);\r
}\r
\r
break;\r
\r
default:\r
- DET_REPORTERROR(MODULE_ID_DCM, 0, DCM_CHANGE_DIAGNOSTIC_SESSION, DCM_E_PARAM_DATA);\r
+ DET_REPORTERROR(MODULE_ID_DCM, 0, DCM_CHANGE_DIAGNOSTIC_SESSION_ID, DCM_E_PARAM);\r
DEBUG(DEBUG_MEDIUM, "Old session invalid");\r
break;\r
}\r
break;\r
\r
default:\r
- DET_REPORTERROR(MODULE_ID_DCM, 0, DCM_CHANGE_DIAGNOSTIC_SESSION, DCM_E_PARAM_DATA);\r
+ DET_REPORTERROR(MODULE_ID_DCM, 0, DCM_CHANGE_DIAGNOSTIC_SESSION_ID, DCM_E_PARAM);\r
DEBUG(DEBUG_MEDIUM, "New session invalid");\r
break;\r
}\r
#if ( MCU_PERFORM_RESET_API == STD_ON )\r
Mcu_PerformReset();\r
#else\r
- DET_REPORTERROR(MODULE_ID_DCM, 0, DCM_UDS_RESET, DCM_E_NOT_SUPPORTED);\r
+ DET_REPORTERROR(MODULE_ID_DCM, 0, DCM_UDS_RESET_ID, DCM_E_NOT_SUPPORTED);\r
#endif\r
}\r
}\r
return E_NOT_OK; \\r
}\r
\r
+#define VALIDATE_RV(_exp,_api,_err,_rv ) \\r
+ if( !(_exp) ) { \\r
+ Det_ReportError(MODULE_ID_DCM, 0, _api, _err); \\r
+ return _rv; \\r
+ }\r
+\r
#define VALIDATE_NO_RV(_exp,_api,_err ) \\r
if( !(_exp) ) { \\r
Det_ReportError(MODULE_ID_DCM, 0, _api, _err); \\r
\r
#else\r
#define VALIDATE(_exp,_api,_err )\r
+#define VALIDATE_RV(_exp,_api,_err,_rv )\r
#define VALIDATE_NO_RV(_exp,_api,_err )\r
#undef DET_REPORTERROR\r
#define DET_REPORTERROR(_x,_y,_z,_q)\r
#include "Dcm_Cbk.h"\r
\r
#if (DCM_DEV_ERROR_DETECT == STD_ON)\r
-// Error codes produced by this module\r
+// Error codes produced by this module defined by Autosar\r
+#define DCM_E_INTERFACE_TIMEOUT 0x01\r
+#define DCM_E_INTERFACE_VALUE_OUT_OF_RANGE 0x02\r
+#define DCM_E_INTERFACE_BUFFER_OVERFLOW 0x03\r
+#define DCM_E_INTERFACE_PROTOCOL_MISMATCH 0x04\r
+#define DCM_E_UNINIT 0x05\r
+#define DCM_E_PARAM 0x06\r
+\r
+// Other error codes reported by this module\r
#define DCM_E_CONFIG_INVALID 0x41\r
-#define DCM_E_UNEXPECTED_PARAM 0x42\r
#define DCM_E_NOT_SUPPORTED 0xfe\r
#define DCM_E_NOT_IMPLEMENTED_YET 0xff\r
\r
-// Service ID in this module\r
+// Service IDs in this module defined by Autosar\r
#define DCM_INIT_ID 0x01\r
-#define DCM_HANDLE_RESPONSE_TRANSMISSION 0x80\r
-#define DCM_UDS_READ_DTC_INFO 0x81\r
-#define DCM_UDS_RESET 0x82\r
-#define DCM_CHANGE_DIAGNOSTIC_SESSION 0x88\r
+#define DCM_PROVIDE_RX_BUFFER_ID 0x02\r
+#define DCM_RX_INDICATION_ID 0x03\r
+#define DCM_PROVIDE_TX_BUFFER_ID 0x04\r
+#define DCM_TX_CONFIRMATION_ID 0x05\r
+#define DCM_GET_SES_CTRL_TYPE_ID 0x06\r
+#define DCM_GET_SECURITY_LEVEL_ID 0x0d\r
+#define DCM_GET_ACTIVE_PROTOCOL_ID 0x0f\r
+#define DCM_COMM_NO_COM_MODE_ENTERED_ID 0x21\r
+#define DCM_COMM_SILENT_COM_MODE_ENTERED_ID 0x22\r
+#define DCM_COMM_FULL_COM_MODE_ENTERED_ID 0x23\r
+#define DCM_MAIN_ID 0x25\r
+\r
+// Other service IDs reported by this module\r
+#define DCM_HANDLE_RESPONSE_TRANSMISSION_ID 0x80\r
+#define DCM_UDS_READ_DTC_INFO_ID 0x81\r
+#define DCM_UDS_RESET_ID 0x82\r
+#define DCM_CHANGE_DIAGNOSTIC_SESSION_ID 0x88\r
#define DCM_GLOBAL_ID 0xff\r
\r
#endif\r