/**
* @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 *********************************/