#ifndef CANNM_INTERNAL_H_\r
#define CANNM_INTERNAL_H_\r
\r
+/** @req CANNM188 @req CANNM196 @req CANNM199 */\r
#if (CANNM_DEV_ERROR_DETECT == STD_ON)\r
-#define CANNM_DET_REPORTERROR(serviceId, errorId) \\r
- Det_ReportError(MODULE_ID_CANNM, 0, serviceId, errorId)\r
+#define CANNM_DET_REPORTERROR(serviceId, errorId, instanceId) \\r
+ Det_ReportError(MODULE_ID_CANNM, (uint8)instanceId, serviceId, errorId)\r
\r
-#define CANNM_VALIDATE(expression, serviceId, errorId, ...) \\r
+#define CANNM_VALIDATE(expression, serviceId, errorId, instanceId, ...) \\r
if (!(expression)) { \\r
- CANNM_DET_REPORTERROR(serviceId, errorId); \\r
+ CANNM_DET_REPORTERROR(serviceId, errorId, instanceId); \\r
return __VA_ARGS__; \\r
}\r
\r
#endif\r
\r
#define CANNM_VALIDATE_INIT(serviceID, ...) \\r
- CANNM_VALIDATE((CanNm_Internal.InitStatus == CANNM_INIT), serviceID, CANNM_E_NO_INIT, __VA_ARGS__)\r
+ CANNM_VALIDATE((CanNm_Internal.InitStatus == CANNM_INIT), serviceID, CANNM_E_NO_INIT, 0, __VA_ARGS__)\r
\r
+/** @req CANNM192 */\r
#define CANNM_VALIDATE_CHANNEL(channel, serviceID, ...) \\r
- CANNM_VALIDATE( (channel < CANNM_CHANNEL_COUNT), serviceID, CANNM_E_INVALID_CHANNEL, __VA_ARGS__)\r
+ CANNM_VALIDATE( (channel < CANNM_CHANNEL_COUNT), serviceID, CANNM_E_INVALID_CHANNEL, channel, __VA_ARGS__)\r
\r
#define CANNM_VALIDATE_NOTNULL(ptr, serviceID, ...) \\r
- CANNM_VALIDATE( (ptr != NULL), serviceID, NM_E_NULL_POINTER, __VA_ARGS__)\r
+ CANNM_VALIDATE( (ptr != NULL), serviceID, NM_E_NULL_POINTER, 0, __VA_ARGS__)\r
\r
typedef enum {\r
CANNM_INIT,\r
- CANNM_UNINIT,\r
+ CANNM_UNINIT\r
} CanNm_InitStatusType;\r
\r
+typedef struct {\r
+ Nm_ModeType Mode; /**< @req CANNM092 */\r
+ Nm_StateType State; /**< @req CANNM094 */\r
+ boolean Requested;\r
+ uint32 TimeoutTimeLeft;\r
+ uint32 RepeatMessageTimeLeft;\r
+ uint32 WaitBusSleepTimeLeft;\r
+ uint32 MessageCycleTimeLeft;\r
+ uint32 MessageCycleOffsetTimeLeft;\r
+ uint8 TxMessageSdu[8];\r
+ uint8 RxMessageSdu[8];\r
+} CanNm_Internal_ChannelType;\r
+\r
typedef struct {\r
CanNm_InitStatusType InitStatus;\r
+ CanNm_Internal_ChannelType Channels[CANNM_CHANNEL_COUNT];\r
} CanNm_InternalType;\r
\r
+/* Timer helpers */\r
+static inline void CanNm_Internal_TickTimeoutTime( const CanNm_ChannelType* ChannelConf, CanNm_Internal_ChannelType* ChannelInternal );\r
+static inline void CanNm_Internal_TickRepeatMessageTime( const CanNm_ChannelType* ChannelConf, CanNm_Internal_ChannelType* ChannelInternal );\r
+static inline void CanNm_Internal_TickWaitBusSleepTime( const CanNm_ChannelType* ChannelConf, CanNm_Internal_ChannelType* ChannelInternal );\r
+static inline void CanNm_Internal_TickMessageCycleTime( const CanNm_ChannelType* ChannelConf, CanNm_Internal_ChannelType* ChannelInternal );\r
+static inline void CanNm_Internal_ClearCbv( const CanNm_ChannelType* ChannelConf, CanNm_Internal_ChannelType* ChannelInternal );\r
+\r
+/* Message helpers */\r
+static inline void CanNm_Internal_TransmitMessage( const CanNm_ChannelType* ChannelConf, CanNm_Internal_ChannelType* ChannelInternal );\r
+static inline uint8 CanNm_Internal_GetUserDataOffset( const CanNm_ChannelType* ChannelConf );\r
+static inline uint8* CanNm_Internal_GetUserDataPtr( const CanNm_ChannelType* ChannelConf, uint8* MessageSduPtr );\r
+static inline uint8 CanNm_Internal_GetUserDataLength( const CanNm_ChannelType* ChannelConf );\r
+\r
+/* Transition helpers */\r
+static inline void CanNm_Internal_PrepareBusSleep_to_RepeatMessage( const CanNm_ChannelType* ChannelConf, CanNm_Internal_ChannelType* ChannelInternal );\r
+static inline void CanNm_Internal_PrepareBusSleep_to_BusSleep( const CanNm_ChannelType* ChannelConf, CanNm_Internal_ChannelType* ChannelInternal );\r
+\r
+static inline void CanNm_Internal_BusSleep_to_RepeatMessage( const CanNm_ChannelType* ChannelConf, CanNm_Internal_ChannelType* ChannelInternal );\r
+static inline void CanNm_Internal_BusSleep_to_BusSleep( const CanNm_ChannelType* ChannelConf, CanNm_Internal_ChannelType* ChannelInternal );\r
+\r
+static inline void CanNm_Internal_RepeatMessage_to_RepeatMessage( const CanNm_ChannelType* ChannelConf, CanNm_Internal_ChannelType* ChannelInternal );\r
+static inline void CanNm_Internal_RepeatMessage_to_ReadySleep( const CanNm_ChannelType* ChannelConf, CanNm_Internal_ChannelType* ChannelInternal );\r
+static inline void CanNm_Internal_RepeatMessage_to_NormalOperation( const CanNm_ChannelType* ChannelConf, CanNm_Internal_ChannelType* ChannelInternal );\r
+\r
+static inline void CanNm_Internal_NormalOperation_to_RepeatMessage( const CanNm_ChannelType* ChannelConf, CanNm_Internal_ChannelType* ChannelInternal );\r
+static inline void CanNm_Internal_NormalOperation_to_ReadySleep( const CanNm_ChannelType* ChannelConf, CanNm_Internal_ChannelType* ChannelInternal );\r
+static inline void CanNm_Internal_NormalOperation_to_NormalOperation( const CanNm_ChannelType* ChannelConf, CanNm_Internal_ChannelType* ChannelInternal );\r
+\r
+static inline void CanNm_Internal_ReadySleep_to_NormalOperation( const CanNm_ChannelType* ChannelConf, CanNm_Internal_ChannelType* ChannelInternal );\r
+static inline void CanNm_Internal_ReadySleep_to_PrepareBusSleep( const CanNm_ChannelType* ChannelConf, CanNm_Internal_ChannelType* ChannelInternal );\r
+static inline void CanNm_Internal_ReadySleep_to_RepeatMessage( const CanNm_ChannelType* ChannelConf, CanNm_Internal_ChannelType* ChannelInternal );\r
+\r
+static inline void CanNm_Internal_NetworkMode_to_NetworkMode( const CanNm_ChannelType* ChannelConf, CanNm_Internal_ChannelType* ChannelInternal );\r
+\r
+\r
#endif /* CANNM_INTERNAL_H_ */\r