#ifndef SIF_H
#define SIF_H

/* Scheduler include files. */
#include "FreeRTOS.h"
#include "task.h"
#include "semphr.h"

#include <stdio.h>
#include <string.h>
#include "pico/stdlib.h"
#include "hardware/gpio.h"


#define _SIF_DEBUG_ 1

#define LOW                 0   //低电平
#define HIGH                1   //高电平
#define SYNC_TIME_NUM       992 //992Tosc中的992
#define SHORT_TIME_NUM      32  //一个逻辑周期中短的时间：32Tosc中的32
#define LONG_TIME_NUM       64  //一个逻辑周期中长的时间：64Tosc中的64
#define LOGIC_CYCLE_NUM     96  //一个逻辑周期  SHORT_TIME_NUM + LONG_TIME_NUM
#define HALF_LOGIC_CYCLE    48  //一个逻辑周期的1/2，即  LOGIC_CYCLE_NUM/2
#define END_SIGNAL_FLAG_NUM 80  // 判断80左右的位置是否为低电平，如果为低电平 则
#define END_SIGNAL_TIME_NUM 100 //结束信号电平时间：5ms低电平 + Nms高电平，实际检测5ms低电平就行，一帧数据发送完成后检测5ms低电平就代表完成了，不发数据的时候上拉电阻拉高了
#define REV_BIT_NUM         8   //接收的bit位个数，看是按字节接收还是按字接收，1字节=8bit，1字=2字节=16bit
#define REV_DATA_NUM        16  //接收的数据个数

#define SIF_REV_PIN             13  // 定义sif通信的引脚
#define TOSC                    3   // 定义系统TOSC基数倍数,默认定义为3,程序中支持自适应了



void GPIO_SIF_Init(void);           // GPIO初始化函数 
void Timer_SIF_Init(void);          //定时器SIF初始化函数
void TIMER_SIF_IRQHandler(void);    // 定时器中断回调函数
void Receive_SIF_Data_Handle(void); //接收数据处理—带校准位，即波特率自适应 
void Check_Sum_Handle(void);        // 校验和处理
unsigned char *pGetSIFData(void);   //获取SIF数据

#ifdef _SIF_DEBUG_
    char *pGetLogStr(void);             //获取日志字符串
#endif


extern void SIF(void *p);

#endif
