summaryrefslogtreecommitdiffstats
path: root/communication/server/include/threads/CAN_Thread.h
blob: 67a814a0f0162b050faa9121563659f59af8bf60 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
/*
 * @copyright Copyright (c) 2016-2019 TOYOTA MOTOR CORPORATION.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef COMMUNICATION_SERVER_INCLUDE_THREADS_CAN_THREAD_H_
#define COMMUNICATION_SERVER_INCLUDE_THREADS_CAN_THREAD_H_
/*!-----------------------------------------------------------------------------
 * @file    CAN_Thread.h
 * @~english
 * @brief   CAN Thread main block header file
 *----------------------------------------------------------------------------*/
#include <peripheral_service/Canif_API.h>
#include <stdlib.h>

#include "com_error_type.h"
#include "ICR_Common.h"
#include "communication_communicationlog.h"

/************************************************************************
*      Macro definitions                          *
************************************************************************/
/* Data size relationship */

#define CAN_TRX_HEADER_SIZE 7     /* Size of send/receive header section (data length excluding operands) */
#define CAN_TRX_HEADER_LEN_SIZE 5 /* Size included in the data length calculation of the send/receive header section */

#define CAN_TRX_CANID_SIZE 4                                                     /* Transmit/Receive CAN ID Size */
#define CAN_TRX_DLC_SIZE 1                                                       /* Transmit/Receive DLC Data Size */
#define CAN_TRX_DLC_RESERVE_SIZE 3          /* Reserved data size after transmit/receive DLC */

#define CAN_RX_CANDATA_SIZE CAN_DATA_SIZE /* Reserve CANData(DATA#1 ~ #x)size */
/* Reserve the structure if it is not a multiple of 4. */
#define CAN_TX_CANDATA_SIZE CAN_DATA_SIZE /* Send CANData(DATA#1 ~ #x)size */
/* Reserve the structure if it is not a multiple of 4. */
#define CAN_RX_OPERAND_SIZE (CAN_TRX_CANID_SIZE + CAN_TRX_DLC_SIZE + CAN_RX_CANDATA_SIZE)
/* Receive operand size */
#define CAN_RX_COMMAND_SIZE (CAN_TRX_HEADER_SIZE + CAN_RX_OPERAND_SIZE)
/* Receive command size */
#define CAN_TX_OPERAND_SIZE (CAN_TRX_CANID_SIZE + CAN_TRX_DLC_SIZE + CAN_TX_CANDATA_SIZE)  // NOLINT(whitespace/line_length)
/* Send operand size */
#define CAN_TX_COMMAND_SIZE (CAN_TRX_HEADER_SIZE + CAN_TX_OPERAND_SIZE)
/* Send command size */
#define CAN_TX_CMD_DELIVERY_SIZE 4     /* Transmitting CAN Command Delivery Data Size Common Block */
#define CAN_TX_CMD_FUELCALC_RST_SIZE 0 /* Transmit CAN Command Delivery Data Size CAN Section Burn Cost Reset Request Receive Data */
#define CAN_TX_CMD_STARTUP_FIN_SIZE 3  /* Transmit CAN Command Delivery Data Size CAN Startup Completion Notification Data */
#define CAN_TX_CMD_MRST_INFO_SIZE 33   /* Transmit CAN Command Delivery Data Size CAN Master Reset Information Notification Receive Data */
#define CAN_TX_CMD_VERSION_SIZE 4      /* Transmit CAN Command Delivery Data Size CAN Version Response Receive Data */
#define CAN_TX_CMD_BUS_STATUS_SIZE 1   /* Transmit CAN Command Delivery Data Size Receive CAN Bus Status Notification Response */

#define CAN_CMDSND_DATA_SIZE 0 /* Command transmission data section size (CAN command control) */

/* Data location relationship */
#define CAN_MSGBUF_CANID_POS 0   /* How many operands the CAN ID contains? */
#define CAN_MSGBUF_DLC_POS 4     /* No. of operand from which DLC contains data? */
#define CAN_MSGBUF_DATA_POS 5    /* How many operands does the DATA contain? */

#define CAN_MSGBUF_PAC_CANID_POS 1 /* How many operands the CAN ID contains? */
#define CAN_MSGBUF_PAC_DLC_POS 3   /* No. of operand from which DLC contains data? */
#define CAN_MSGBUF_PAC_DATA_POS 4  /* How many operands does the DATA contain? */

/* Error definitions */
#define RET_CAN_INIT_SUCCESS RET_NORMAL /* Success in initialization */
#define RET_CAN_INIT_ERROR RET_ERROR    /* Master Clear failed */

#define RET_CAN_NORMAL CANIF_RET_NORMAL                         /* Normal completion */
#define RET_CAN_ERROR_CREATE_EVENT CANIF_RET_ERROR_CREATE_EVENT /* Event generation failure */
#define RET_CAN_ERROR_PARAM CANIF_RET_ERROR_PARAM               /* Specified parameter is invalid */
#define RET_CAN_ERROR_UNDEF CANIF_RET_ERROR_UNDEF               /* Unregistered ID */
#define RET_CAN_ERROR_SNDID CANIF_RET_ERROR_PID                 /* Discrepancy of Destination ID */
#define RET_CAN_ERROR_BUFFULL CANIF_RET_ERROR_BUFFULL           /* Registered FULL (Delivery/Periodic Transmission/Communication Disruption Monitor) */
#define RET_CAN_ERROR_CANIDFULL CANIF_RET_ERROR_CANIDFULL       /* CAN ID type is FULL */
#define RET_CAN_ERROR_TIMER CANIF_RET_ERROR_TIMER               /* Timer acquisition failed */
#define RET_CAN_ERROR_CANCEL CANIF_RET_ERROR_CANCEL             /* Abnormal termination (discard/cancel data) */

/* CANDataControl code used in the transmission/reception relationship */
#define CAN_ID_EXT_FLAG 0x80000000UL /* CAN ID Extended Identity Codes */

/* Timer Relationship */
#define CAN_TIMER_SEQNO_CODE 0x0001       /* CAN thread timer sequence number    */
#define CAN_TIMER_SEQNO_BUFFLOGOUT 0x0002 /* Buffer log output timer No.      */

#define COMM_WATCH_SEQNO_CODE 0x0000 /* Timer Sequence Number Identification Flag of Communication Disruption */
#define FREQ_TRANS_SEQNO_CODE 0x8000 /* Timer Sequence Number Identification Flag for Periodic Transmission */
#define CAN_TIMER_DISTINCTION_CODE 0xF000   /* Timer Sequence Number Identification Flag */

#define CAN_COMTIM_OFF 0x00 /* Timer not started            */
#define CAN_COMTIM_ON 0x01  /* Timer activation state            */

#define CAN_FREQ_TRSNSMISSION_LIST_NUM 32 /* Maximum number of periodic transmission management tables     */
#define COMM_WATCH_LIST_NUM 64            /* Maximum number of communication disruption monitoring management tables     */


/* Maximum number of CAN periodic transmission timer management data    */
#define CAN_FREQTRANS_TIMER_DATA CAN_FREQ_TRSNSMISSION_LIST_NUM
/* Maximum number of CAN disruption monitoring timer management data   */
#define CAN_COMMWATCH_TIMER_DATA COMM_WATCH_LIST_NUM

#define CAN_BUFFER_LOGOUT_NAME "/fs/U0/can_buffer_log.txt" /*     */

#define CAN_USAGE_RATE_THRESHOLD 80 /* Buffer Utilization Threshold (80%)         */

#define CAN_DELIVERY_DLCERR 0xfeff   /* CAN delivery error (DLC)        */
#define CAN_DELIVERY_CSUMERR 0xfefe  /* CAN delivery errors (CSUM)        */
#define CAN_DELIVERY_ERR 0xfefd      /* CAN delivery error (delivery unregistered)    */
#define CAN_TRANCE_ICR_ERR 0xfefc    /* CAN transmission error (ICR)        */
#define CAN_TRANCE_SYSCOM_ERR 0xfefb /* CAN transmission errors (SYSCOM)      */

/*********************************************************************
*                       Type definition
***********************************************************************/
typedef CANIF_RET_API RET_CAN;

typedef enum {
  CAN_PROTOCOL_TYPE_CAN = 0, /* CAN */
  /* -------------------------------------------------------------------- */
  CAN_PROTOCOL_TYPE_TERMINATE /* Mode termination */
} CAN_PROTOCOL_TYPE;

/************************************************************************
*      Function prototype                        *
************************************************************************/
RET_CAN CANMainThreadInit(void);
EFrameworkunifiedStatus CANCallbackForTimeOut(HANDLE);
void CANTimeOutMsg(HANDLE h_app, uint16_t);
void CANCommonTimerStart(void);
void CANBufferLogOut(void);
void CANDebugLogOut(uint16_t, void*);
void CANFreqTransTimeOutMap(void);

/*******************************************************************************
 * MODULE    : CANMsgErrChk
 * ABSTRACT  : Message Send/Receive Error Check Processing
 * FUNCTION  : Check for message transmission and reception errors and perform error processing.
 * ARGUMENT  : RET_API ret_api Message send/receive return value
 *           : u_int16 communication_code  Registration code
 * NOTE      :
 * RETURN    : 
 ******************************************************************************/

inline void CANMsgErrChk(int32_t ret_api, uint16_t communication_code) {
  if (RET_ERROR == ret_api) {  /* In case of an error  */
    FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "CANMsgErrChk Called.");
    exit(EXIT_FAILURE);
  }
}
#endif  // COMMUNICATION_SERVER_INCLUDE_THREADS_CAN_THREAD_H_