/**
* @file MT6816_ATY.h
*
* @param Project DEVICE_DRIVER_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 MT6816 magnetic encoder for C platform
*
* @version
* - 1_01_251222 > ATY
* -# Preliminary version, first Release
********************************************************************************
*/
#ifndef __MT6816_ATY_H
#define __MT6816_ATY_H
#include "INCLUDE_ATY.h"
/******************************* For user *************************************/
/******************************************************************************/
struct MT6816_ATY_Dev{
void (*nssSet)(uint8_t level);
uint8_t (*spiProcess)(uint8_t* data_t, uint16_t len, uint8_t rw);
uint16_t angleValue;
float angle;
float angleLast;
float angleStart;
float angleTotal;
uint32_t turnCount;
uint8_t start;
uint8_t error;
uint16_t zeroPoint;
uint8_t angleReverseDir;
uint8_t lock;
};
// MT6816 Register Addresses
#define MT6816_REG_ANGLE_13_6 0x03
#define MT6816_REG_ANGLE_5_0 0x04
#define MT6816_REG_ANGLE_OVER_SPEED 0x05
#define MT6816_PARITY_CHECK_MASK 0x01
#define MT6816_NO_MAG_WARNING_MASK 0x02
#define MT6816_OVER_SPEED_MASK 0x08
uint8_t MT6816_ParityCheck(struct MT6816_ATY_Dev* dev, uint16_t data);
uint8_t MT6816_ErrorCheck(struct MT6816_ATY_Dev* dev, uint8_t* data);
uint8_t MT6816_ReadAngleBase(struct MT6816_ATY_Dev* dev);
uint8_t MT6816_ReadAngleFull(struct MT6816_ATY_Dev* dev);
uint16_t MT6816_SetZeroPoint(struct MT6816_ATY_Dev* dev);
float MT6816_CalculateAngle(struct MT6816_ATY_Dev* dev, uint16_t angle);
float MT6816_CalculateAngleReal(struct MT6816_ATY_Dev* dev, uint16_t angle);
uint32_t MT6816_TurnCount(struct MT6816_ATY_Dev* dev);
uint32_t MT6816_TurnCountOffset(struct MT6816_ATY_Dev* dev);
void MT6816_TurnCountOffsetStart(struct MT6816_ATY_Dev* dev, uint8_t dir);
void MT6816_TurnCountOffsetStop(struct MT6816_ATY_Dev* dev);
#endif /* __MT6816_ATY_H */
/******************************** End Of File *********************************/