60 lines
1.4 KiB
C
60 lines
1.4 KiB
C
#ifndef INC_MMR_CAN_TIMER_SCS_H_
|
|
#define INC_MMR_CAN_TIMER_SCS_H_
|
|
|
|
#include "mmr_can_message_id.h"
|
|
#include "mmr_can_types.h"
|
|
|
|
|
|
/**
|
|
* Scs_timer represents the max number of counter
|
|
* that need to checked w/current time
|
|
*/
|
|
#ifndef MMR_SCS_NR_TIMERS
|
|
#define MMR_SCS_NR_TIMERS 5
|
|
#endif
|
|
|
|
/**
|
|
* It depends on how many bits the board devotes to the timer
|
|
* Check the datasheet
|
|
*/
|
|
typedef uint32_t TimerRange;
|
|
|
|
|
|
|
|
typedef struct {
|
|
MmrCanMessageId scsId;
|
|
CanId receiverId;
|
|
TimerRange counter;
|
|
} MmrTimerSCS;
|
|
|
|
|
|
/**
|
|
* @brief Represents the base-struct to manage a single RTR
|
|
* and allows to interface with the associated SCS's timer
|
|
*/
|
|
typedef struct {
|
|
MmrCanMessageId scsId;
|
|
CanId receiverId;
|
|
int rtr;
|
|
} RTRresponse;
|
|
|
|
|
|
|
|
/**
|
|
* All time units are to be considered as microseconds ( 1ms )
|
|
*/
|
|
bool MMR_CAN_ClearTimerSCS(MmrCanMessageId scsId, CanId receiverId);
|
|
bool MMR_CAN_SetTimerSCS(MmrCanMessageId scsId, CanId receiverId, TimerRange currentTime);
|
|
|
|
/**
|
|
* @brief The delay is taken individually so that the 'manager'
|
|
* can first check the ACK and eventually reset the associated arr_timer
|
|
*
|
|
* @param rtrResponse the 'manager' will have to manage an array of struct RTRresponse
|
|
* @param currentTime from __HAL_TIM_GET_COUNTER(&htimX) or directly from the CNT register
|
|
* @param thresholdDelay by rules 500ms
|
|
*/
|
|
bool MMR_CAN_GetTimerSCS(RTRresponse *rtrResponse, TimerRange currentTime, TimerRange thresholdDelay);
|
|
|
|
|
|
#endif // !INC_MMR_CAN_TIMER_SCS_H_
|