FreeHIL
Loading...
Searching...
No Matches
FH_CAN_Send_H.c
Go to the documentation of this file.
1/**
2 * @file
3 * @brief
4 * <b>File Map:</b>\n
5 * <b>FH_Root</b>, Section <b>FH_Perif</b>, <b>FH_CAN</b>, <b>Cmd</b> (Command), <b>Send</b>, <b>Send_H</b> (Send Health)\n
6 * Functions in this file, verify the health of the different message frames related to <b>CAN</b>
7 *
8 * @attention <b>FH</b> user could left this file intact
9 *
10 *******************************************************************************
11 * SPDX-License-Identifier: Apache-2.0
12 *
13 * Copyright 2026 Vahid Hasirchi
14 *
15 * Licensed under the Apache License, Version 2.0 (the "License");
16 * you may not use this file except in compliance with the License.
17 * You may obtain a copy of the License at
18 *
19 * http://www.apache.org/licenses/LICENSE-2.0
20 *
21 * Unless required by applicable law or agreed to in writing, software
22 * distributed under the License is distributed on an "AS IS" BASIS,
23 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
24 * See the License for the specific language governing permissions and
25 * limitations under the License.
26 ********************************************************************************
27
28 *
29 * <b>For more information refer to FreeHIL.com</b>
30 *
31*/
32
33/* Includes ------------------------------------------------------------------*/
35
36#include "../../../../../../../FH_Embedded/FH_Root/FH_General/FH_GeneralFunctions/FH_GeneralFunctions.h"
38
39#if FH_CAN_MaxPeripheralNumber > 0 // It is configurable in FH_DevicePeripherals.h
40
41/**
42 * @brief This function verifies the health of <b>FH_CAN_Commands_Send</b> command
43 *
44 * @param fh_RFCommunication_Message
45 * The message frame set by <b>RobotFramework</b>
46 *
47 * @verbatim
48 ==============================================================================
49 ##### RobotFramework Example #####
50 ==============================================================================
51 @{MessageData} = Create List ${CAN01} 02 B1 FF
52 &{Message} = Create Dictionary DeviceAddress=${DeviceAddress_01} Function=${Function_CAN} Command=${CAN_Commands_Send} Data=@{MessageData}
53 ${Result} SendMessage &{Message}
54
55 Comments:
56
57 CAN01 => It indicates the CAN 01
58 02 => Example length of the data to be sent
59 B1 FF => Example data (0xB1, 0xFF) to be sent (or apart from the data to be sent, it may include some other data like ID, Filter, ... to be processed too, if need be) through the <b>CAN 01</b>\n
60 DeviceAddress_01 => It shall be equal to the address of the device: FH_RFCommunication_DeviceAddress
61 Function_CAN => It is the function in the message frame
62 CAN_Commands_Send => It is the command of the function in the message frame
63 @endverbatim
64 *
65 * @return FH_ErrorInfo is returned
66 *
67
68*/
70{
71 FH_ErrorInfo fh_ErrorInfo; // Error Information
72 FH_ResetErrorInfo(&fh_ErrorInfo); // Reset Error Information to default
73
74 uint8_t FH_MessageDataLength; // It temporarily stores the DataLength in the message frame
75 uint8_t FH_PeripheralNumber; // It temporarily stores the PeripheralNumber (Data[0]) in the message frame
76 uint8_t FH_DataLength; // It temporarily stores the DataLength (Data[1]) of the data supposed to be sent
77
78 // Verifying the minimum possible length in the message frame
79 FH_MessageDataLength = fh_RFCommunication_Message -> DataLength;
80 if (FH_MessageDataLength < FH_CAN_MinCommandSize_Send) // If the length is less than expected value
81 {
82 fh_ErrorInfo.error_code = FH_ERROR_MessageFrame; // There is message frame error
83 return fh_ErrorInfo;
84 }
85
86 // Verifying the possible PeripheralNumber in the message frame
87 FH_PeripheralNumber = fh_RFCommunication_Message -> Data[CAN_Send_PeripheralNumber] ;
88 if (FH_PeripheralNumber == 0 || FH_PeripheralNumber > FH_CAN_MaxPeripheralNumber) // If the PeripheralNumber is not within the expected value
89 {
90 fh_ErrorInfo.error_code = FH_ERROR_MessageFrame; // There is message frame error
91 return fh_ErrorInfo;
92 }
93
94 // Verifying the possible DataLength of the data supposed to be sent
95 FH_DataLength = fh_RFCommunication_Message -> Data[CAN_Send_DataLength] ;
96 if (FH_DataLength == 0) // If the DataLength is 0
97 {
98 fh_ErrorInfo.error_code = FH_ERROR_MessageFrame; // There is message frame error
99 return fh_ErrorInfo;
100 }
101
102 if (FH_DataLength != (FH_MessageDataLength - 2)) // If SharedDataLength is not matched with the length of the message frame
103 {
104 fh_ErrorInfo.error_code = FH_ERROR_MessageFrame; // There is message frame error
105 return fh_ErrorInfo;
106 }
107
108 fh_ErrorInfo.error_code = FH_ERROR_OK; // There is no error
109 return fh_ErrorInfo;
110}
111
112#endif