/** * @file CAN_ATY.h * * @param Project DEVICE_GENERAL_ATY_LIB * * @author ATY * * @copyright * - Copyright 2017 - 2026 MZ-ATY * - This code follows: * - MZ-ATY Various Contents Joint Statement - * * https://mengze.top/MZ-ATY_VCJS * - CC 4.0 BY-NC-SA - * * https://creativecommons.org/licenses/by-nc-sa/4.0/ * - Your use will be deemed to have accepted the terms of this statement. * * @brief functions of can process for C platform * * @version * - 1_00_260116 > ATY * -# Preliminary version ******************************************************************************** */ /** * ============================================================================= * CAN Protocol Frame Definitions (Classic CAN, 11-bit Standard ID) * ============================================================================= * * ------------------- * │ Frame Type │ CAN ID │ Data Field Layout │ * ------------------- * │ Broadcast │ 0x00FF │ [0]: CMD │ * │ (Host -> Slave) │ │ [1]: REG_ADDR │ * │ │ │ [2-5]: VALUE (float) │ * │ │ │ [6-7]: - │ * ------------------- * │ Multicast │ 0x100 + N │ [0]: CMD │ * │ (Host -> Slave) │ (N = Group Id) │ [1]: REG_ADDR │ * │ │ │ [2-5]: VALUE (float) │ * │ │ │ [6-7]: - │ * ------------------- * │ P2P │ 0x200 + N │ [0]: CMD │ * │ (Host -> Slave) │ (N = ADDR) │ [1]: REG_ADDR │ * │ │ │ [2-5]: VALUE │ * │ │ │ [6-7]: - │ * ------------------- * │ Slave Response │ 0x300 + N │ [0]: CMD_ECHO │ * │ (Slave -> Host) │ (N = ADDR) │ [1]: REG_ADDR │ * │ │ │ [2-5]: VALUE (float) │ * │ │ │ [6]: ERR │ * │ │ │ [7]: - │ * ------------------- * │ Fault Report │ 0x0010 + N │ [0]: FAULT_CODE │ * │ (High Priority) │ (N = ADDR) │ [1]: SEVERITY │ * │ │ │ [2-5]: ERROR_VALUE (float) │ * │ │ │ [6-7]: - │ * ------------------- * ============================================================================= */ #ifndef __CAN_ATY_H #define __CAN_ATY_H #include "INCLUDE_ATY.h" /******************************* For user *************************************/ /******************************************************************************/ struct CAN_ATY_Dev{ uint8_t (*addTxMessage)(uint32_t addr, uint8_t* data, uint8_t len); uint8_t addr; uint8_t groupId; uint8_t lock; }; void CAN_RegRW(struct CAN_ATY_Dev* dev, uint32_t frameId, uint8_t cmd, uint8_t regAddr, float value); void CAN_Response(struct CAN_ATY_Dev* dev, uint8_t cmd, uint8_t regAddr, float value, uint8_t error); void CAN_FaultReport(struct CAN_ATY_Dev* dev, uint8_t faultCode, uint8_t severity, float faultValue); void CAN_RX_Callback(struct CAN_ATY_Dev* dev, uint32_t stdId, float* data, uint8_t* rxData); #define CAN_FILTER_BROADCAST 1 #define CAN_FILTER_MULTICAST 2 #define CAN_FILTER_P2P 3 #define CAN_FILTER_RESPONSE 4 #define CAN_FILTER_FAULT 5 #define CAN_STD_ID_BROADCAST 0x00FF #define CAN_STD_ID_MULTICAST 0x0100 #define CAN_STD_ID_P2P 0x0200 #define CAN_STD_ID_RESPONSE 0x0300 #define CAN_STD_ID_FAULT 0x0010 #define CAN_CMD_READ 0x01 #define CAN_CMD_WRITE 0x02 #define CAN_ERR_NONE 0x00 #define CAN_ERR_CMD 0x01 #define CAN_ERR_PARAM 0x02 #define CAN_FAULT_SEVERITY_WARN 0x00 #define CAN_FAULT_SEVERITY_CRITICAL 0x01 #define CAN_FAULT_CODE_NONE 0x00 #endif /* __CAN_ATY_H */ /******************************** End Of File *********************************/