/**************** (C) COPYRIGHT 2023 山东云唐智能科技有限公司 *******************
 * 文 件 名：
 * 创 建 者:  Kaiser
 * 描   述  :
 * 最后修改:
 *********************************** 修订记录 ************************************
 * 版   本:
 * 修订人:
 ********************************************************************************/

/******************************** 功能说明 *************************************
 *
 *******************************************************************************/

#ifndef _APPDEF_H_
#define _APPDEF_H_

#include "BSP.H"
union floattouint16_t { // 32位浮点数转换为16位整数
    float f;
    uint32_t u32;
    uint16_t u16[2];
    uint8_t u8[4];
};
extern union floattouint16_t FtU;
/******************************** 功能说明 *************************************
 *
 *******************************************************************************/
extern void
delay_us(uint32_t us);

/******************************** 功能说明 *************************************
 *
 *******************************************************************************/

extern void ModbusPoll(const void *parg);
extern void MODBUS_Init(uint8_t MBAddress);
extern uint16_t usRegInputBuf[];
extern uint16_t usRegHoldingBuf[];
extern uint8_t ucRegDiscBuf[];
extern uint8_t ucRegCoilsBuf[];
#define RegCoilsBufRead(addr) ((ucRegCoilsBuf[(addr) / 8u]) & (0x01 << ((addr) % 8)))
#define RegCoilsBufRst(addr)  ((ucRegCoilsBuf[(addr) / 8u]) &= (~(0x01 << ((addr) % 8))))
#define RegCoilsBufSet(addr)  ((ucRegCoilsBuf[(addr) / 8u]) |= (0x01 << ((addr) % 8)))

#define RegDiscBufRead(addr)  ((ucRegCoilsBuf[(addr) / 8u]) & (0x01 << ((addr) % 8)))
#define RegDiscBufRst(addr)   ((ucRegDiscBuf[(addr) / 8u]) &= (~(0x01 << ((addr) % 8))))
#define RegDiscBufSet(addr)   ((ucRegDiscBuf[(addr) / 8u]) |= (0x01 << ((addr) % 8)))

/******************************** 功能说明 *************************************
 *
 *******************************************************************************/
extern void delay_us(uint32_t us);


/******************************** 功能说明 *************************************
 *
 *******************************************************************************/
extern void GPIO_InPutset(void);
extern uint8_t InstrumentTypeRead(void);
extern bool SafeCheck(void);

extern void INIT_CS555X(void);

extern void AD7190_Init(void);
extern void AD7190_ReadVoltage(void);

extern void WeightCtrl_Init(void);
extern uint8_t pageNum;

struct uCalibrateWeight {
    double WeightSlope; // 斜率
    double WeightZero; //	 零点
};
extern struct uCalibrateWeight CalibrateWeight;
extern struct uCalibrateWeight CalibrateWeight2;
extern uint32_t HX711Data; // 原始数据
extern uint32_t HX711Zero; // 原始数据
extern float WeightData;   // 重量数据
extern double WeightData2;  // 重量数据
extern double ADvalue2filter;
extern double WeightZeroOld;
extern double WeightData2Finally;
extern float Temperature;

extern void MAX6675_Init(void);
extern void USARTHMIInit(void);
extern void BIOS_USART2_Init(uint32_t baudrate);
extern void USART2Print(uint8_t *buffer, uint8_t lenth);

extern void AC_CTRL_Init(void);
extern void Pump_OutCmd(bool NewState);

/******************************** 功能说明 *************************************
 *
 *******************************************************************************/

struct Pset {
    uint16_t CRC_Head; // CRC校验头

    uint8_t AutoTimeStop;     // 自动停机时间
    uint8_t AutoWeightChange; // 自动停机重量
    uint8_t TempSet;          // 干燥温度
    uint8_t TimeStop;         // 停机时间
    uint8_t AutoStyle;        // 停机方式 自动
    uint8_t FastStyle;        // 干燥模式 快速

    uint8_t FilterQ;     // 滤波器阶数
    uint8_t SensorQ;     // 传感器阶数
    uint8_t HoldTime;    // 稳定时间
    uint8_t RuBianLiang; // 蠕变量
    uint8_t RuBianTime;  // 蠕变时间
    uint8_t ZeroTrack;   // 零点跟踪

    float TempDelta; // 校准温度差
    float WeightSet; // 校准重量

    
    uint32_t BaudRate;      //  波特率
    bool SW0;               //  自定义开关1
    bool SW1;               //  自定义开关2
    bool SW2;               //  自定义开关3
    uint8_t PercentType;     //  含水量含固量
    uint8_t Title[32];      // 标题
    uint8_t TitleOne[32];   // 标题1
    uint8_t TitleTwo[32];   // 标题2
    uint8_t TitleThree[32]; // 标题3
    uint8_t UserName[16];   // 用户名
    uint8_t UserPwd[16];    // 密码

    uint16_t CRC_Tail; // CRC校验尾
};
extern struct Pset Set;

extern void FM24Init(void);
extern void FM24_Write(uint16_t addr, uint8_t *data, uint8_t len);
extern void FM24_Read(uint16_t addr, uint8_t *data, uint8_t len);
#define CalibrateWeight2Set 0x0140u
#define RW_Set              0x0200u
#define CRCHead             0x5A5Au
// #define RW_WeightSlope  0x0104u
// #define RW_WeightZero   0x0108u
// #define RW_ColorHSV_A   0x010Cu
// #define RW_ColorHSV_B   0x0110u
// #define RW_ColorHSV_C   0x0114u
// #define RW_ColorHSV_D   0x0118u
// #define RW_BackADCLimit 0x011Cu
// #define RW_RunStop      0x0120u
// #define RW_CRC_End      0x0180u
#define CRCEnd 0xAA55u
extern void BIOS_NVIC_Init(void);
extern bool weightChanging;

#endif

/********  (C) COPYRIGHT 2023 山东云唐智能科技有限公司 **** End Of File ********/
