/*************************** (C) COPYRIGHT 2017 CXHY ****************************
 * 文件名  ：data_typedef.h
 * 描  述  ：数据定义    
 * 版  本  ：V1.0
 * 作  者  ：XuZhongPing
 * 日  期  ：2017/02/05 
*********************************************************************************/
#ifndef __DATA_DEF_H
#define __DATA_DEF_H	 
#include "stdio.h"
#include "stdint.h"
#include "message.h"
#include "date_time.h"

// 设备类型
typedef enum
{   
// 	SINGLE_BARREL_660L = 1,
// 	DOUBLE_BARREL_480L = 2,
// 	DOUBLE_BARREL_BOTTLE_480L = 3,
// 	SINGLE_BARREL_480L = 4,
	
	SINGLE_CLASSIFICATION = 1,
	DOUBLE_CLASSIFICATION = 2,
	DOUBLE_CLASSIFICATION_BOTTLE = 3,
	THREE_CLASSIFICATION = 4,
	FOUR_CLASSIFICATION = 5,
	
}deviceDefine;

// 可回收物类型
typedef enum
{    
	PAPER = 1,										//纸类
	PLASTIC = 3,									//塑料
	GLASS = 4,										//玻璃
	METAL = 5,										//金属
	RECYCLED = 7,									//可回收物
	KITCHEN = 8,									//厨余
	KITCHEN_1 = 81,								//厨余1
	KITCHEN_2 = 82,								//厨余2	
	BIG_BOTTLE = 9,								//大塑料瓶子
	SMALL_BOTTLE = 10,						//小塑料瓶子
	CANS = 11,										//易拉罐
	BATTERY = 13,									//电池
	FABRIC = 14,									//织物
	BOOK = 15,										//书本
	NEWSPAPER = 16,								//报纸
	PLASTIC_2 = 17,								//塑料2
	OTHER = 18,										//其它
	HARMFUL = 30,									//有害垃圾
	DRY_WASTES = 63,							//干垃圾
	WET_WASTES = 64,							//湿垃圾
	PERISHABLE = 68,							//易腐
	
}trashType;

extern char VersionStr[17];

extern uint8_t deviceInitFlag;							//设备硬件接口初始化完成标志
extern uint8_t swKeysVal;
extern uint8_t adcDevInitOK;
extern uint8_t synchronousOpenDoorMark;			//同步开门标志		

extern uint16_t delayRandomTime;						//网络断开重连后延时发送随机时间

extern uint8_t water;												//水位

extern uint8_t optoSwitchStatus;						//光电开关状态
extern uint8_t switchKey1Status;						//接近开关状态
extern uint8_t switchKey2Status;						//接近开关状态
extern uint8_t dropOffPortMark1;
extern uint8_t dropOffPortMark2;

extern uint8_t getRecycleClearDoorMark;			//硬件获取的收运门状态
extern uint8_t recycleClearDoorMark;				//收运门状态

extern uint8_t smokeAlarmStatus;						//烟雾报警状态

extern uint8_t dropPortClosedStatus1;				//投放口关闭状态
extern uint8_t dropPortClosedStatus2;

extern uint8_t gpsConnectSta;								//GPS模块硬件连接状态
extern uint8_t gpsStatus;										//GPS定位状态
extern uint8_t gpsEW;												//经度方向（0->E-东,W-西）
extern uint32_t gpsLon;											//经度（已放大1000000倍）
extern uint8_t  gpsNS;											//纬度方向（0->N-北,1->S-南）
extern uint32_t gpsLat;											//纬度（已放大1000000倍）
extern uint8_t getGpsStatus;								//取得GPS信息

extern uint8_t distance;										//测距数据
extern uint8_t getDistance1;								//取得的第1路距离
extern uint8_t getDistance2;								
extern uint8_t getDistance3;								
extern uint8_t getDistance4;	
extern uint8_t updateDistanceMark;			

extern uint8_t fullMarkLeft;							//左桶装满标志
extern uint8_t fullMarkRight;							//右桶装满标志

extern uint8_t fullMark1;
extern uint8_t fullMark2;
extern uint8_t fullMark3;
extern uint8_t fullMark4;

extern uint16_t weight;											//重量数据
extern uint16_t getWeight1;									//取得的第1路重量
extern uint16_t getWeight2;									
extern uint16_t getWeight3;									
extern uint16_t getWeight4;		

extern uint16_t getWeightBefore1;						//取得的第1路回收桶的重量（开门前）
extern uint16_t getWeightAfter1;						
extern uint16_t getWeightBefore2;						
extern uint16_t getWeightAfter2;					
extern uint16_t getWeightBefore3;						
extern uint16_t getWeightAfter3;						
extern uint16_t getWeightBefore4;						
extern uint16_t getWeightAfter4;					

extern uint16_t weightChangeBefore_1;				//重量变化前的重量
extern uint16_t weightChangeBefore_2;	

//异常作弊投放重量
extern uint16_t exceptionWeight1;						//检测到的异常作弊投放重量
extern uint16_t exceptionWeight2;									
extern uint16_t exceptionWeight3;									
extern uint16_t exceptionWeight4;		

extern uint16_t exceptionWeightBefore1;			//取得的第1路异常投放重量（作弊前）
extern uint16_t exceptionWeightAfter1;			//取得的第1路异常投放重量（作弊后）
extern uint16_t exceptionWeightBefore2;						
extern uint16_t exceptionWeightAfter2;							
extern uint16_t exceptionWeightBefore3;						
extern uint16_t exceptionWeightAfter3;							
extern uint16_t exceptionWeightBefore4;					
extern uint16_t exceptionWeightAfter4;						

extern uint16_t smallBottleCount;						//小塑料瓶数量
extern uint16_t bigBottleCount;							//大塑料瓶数量
extern uint16_t cansCount;									//金属易拉罐数量

extern uint8_t getPutInType;								//取得的投放类型（按钮、IC卡、二维码、垃圾袋条形码）
extern uint8_t getDataLength;								//取得的身份信息长度
extern uint8_t getDataBuf[256];							//取得的身份信息缓存

extern uint8_t sendPutInType;								//发送投放类型（按钮、IC卡、二维码、垃圾袋条形码）
extern uint8_t sendDataLength;							//发送身份信息的长度
extern uint8_t sendDataBuf[256];							//发送身份信息缓存

extern uint8_t pcRequestOpenDoorMark;				//上位机请求打开投放口
extern uint8_t openDoorNumber;							//请求打开的投口编号

extern uint8_t rspPCDoorNumber;							//应答上位机投口编号	
extern uint8_t rspPCWeightNumber;						//应答上位机秤盘编号
extern uint8_t rspPCDistanceNumber;					//应答上位机测距编号
extern uint8_t rspPCTemperatureNumber;			//应答上位机温度编号

extern uint8_t pcRequestClooseDoorMark;			//上位机请求关闭投放口

//收运用户信息上传
extern uint8_t collectorSendAuthType;				//发送投放类型（按钮、IC卡、二维码、垃圾袋条形码）
extern uint8_t collectorSendDataLength;			//发送身份信息的长度
extern uint8_t collectorSendDataBuf[35];		//发送身份信息缓存

extern uint8_t get_IC_ID[16];								//接收到的IC卡号
extern uint8_t send_IC_ID[16];								//将要发送到后台的IC卡号
extern uint8_t getCardNumberBit[32];				//卡号分离出来的17位十进制数据


//后台操作应答相关变量
extern uint8_t userInfoQueryStatus;					//从后台获取用户信息返回状态
extern uint8_t getUserInfoMark;							//取得用户信息标志
extern uint8_t putInUploadSuccessMark;			//投放上传成功标志
extern uint8_t getSetDistanceParamMark;			//取得后台设置满溢参数
extern uint8_t getDeviceWorkStatusMark;			//取得后台设置的设备工作状态标志

extern uint8_t 	deviceStatus;							//心跳包返回设备状态
extern uint8_t 	isAuth;										//是否通过验证
extern uint8_t 	rewardDisplayType;				//奖励显示方式（余额或积分）
extern uint32_t userID;										//用户ID		
extern uint32_t accountNum;								//用户账号
extern uint8_t 	nickNameLength;						//昵称数据长度
extern uint8_t 	nickName[64];							//昵称数据
extern uint32_t capital;									//资金
extern uint32_t capitalAfter;							//资金（投放后的余额）
extern uint8_t 	residue;									//提货码
extern uint8_t  businessNum[8];						//交易流水号
extern uint16_t receiveBusinessNum;				//后台返回的交易流水号
extern uint8_t  isOutput;									//是否可以出货
extern uint8_t  barcodeLength;						//垃圾袋二维码数据长度
extern uint8_t  barcode[32];							//垃圾袋二维码数据

//收运门相关
extern uint8_t getBoxOpenAckMark;						//取得后台返回打开收运门状态标志
extern uint8_t boxOpenAckStatus;						//后台应答的收运门打开标志	

//投放过程中作用的变量
extern uint8_t putInProgress;								//投放进行中标志
extern uint8_t isOpenDoor;
extern uint8_t keyOpenDoorRequest;

extern uint8_t isOpenDoorRequest_1;					//接收到主机请求开门标志
extern uint8_t isOpenDoorRequest_2;
extern uint8_t isOpenDoorRequest_3;
extern uint8_t isOpenDoorRequest_4;
extern uint8_t isOpenDoor_1;								//接收到主机请求开门标志
extern uint8_t isOpenDoor_2;
extern uint8_t isOpenDoor_3;
extern uint8_t isOpenDoor_4;

extern uint8_t isCloseDoorMark_1;						//请求关门标志
extern uint8_t isCloseDoorMark_2;
extern uint8_t isCloseDoorMark_3;
extern uint8_t isCloseDoorMark_4;

extern uint8_t openDoorCtrlEndMark_1;				//开关门控制结束标志
extern uint8_t openDoorCtrlEndMark_2;
extern uint8_t openDoorCtrlEndMark_3;
extern uint8_t openDoorCtrlEndMark_4;


extern uint8_t putInEndMark;								//设备运转控制结束标志

extern uint8_t delayCloseDoorStatus;				//接收到延迟关门
extern uint8_t delayCloseDoorStatus2;				//接收到延迟关门

extern uint8_t disablePutInMark;						//禁止投放完成标志
extern uint8_t putInOKMark;									//投放完成标志

extern uint8_t getRemainingTimerStatus;			//取得倒计时时间状态
extern uint8_t remainingTimer; 							//剩余关门时间

extern uint8_t faceEntryFlag;							//人脸录入操作标志

extern uint8_t devChannel1FaultMark;			//故障标志
extern uint8_t devChannel2FaultMark;			//故障标志
extern uint8_t devChannel3FaultMark;			//故障标志
extern uint8_t devChannel4FaultMark;			//故障标志
extern uint8_t deviceFault;								//设备故障
extern uint8_t faultLedFlashMark;					//故障时灯闪烁标志
extern uint8_t faultCode_1;								//故障码
extern uint8_t faultCode_2;
extern uint8_t faultCode_3;
extern uint8_t faultCode_4;
extern uint8_t limitKeyExceptionMark;				//限位开关异常标志
extern uint8_t displayFaultCode;						//显示的故障码

extern uint8_t boxOpenRecordMark;					//收运清理门开门记录标志（标志是否已经开过，用于临时二维码开门）
extern uint8_t boxOpenMark;								//取得临时二维码开收运清理门标志
extern uint8_t boxOpenQRMark;							//取得临时二维码开收运清理门标志

extern uint8_t exitMark;									//退出标志

//设备相关参数
//当前使用的参数变量
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
extern uint8_t deviceType;								//设备的类型
extern uint8_t devChannelNumbers;					//设备投放口通道数量（由类型参数初始化设置数值）
extern uint8_t leftBarrelType;						//设备左桶类型
extern uint8_t rightBarrelType;						//设备右桶类型

extern uint8_t devChannel1Type;					//设备通道类型
extern uint8_t devChannel2Type;
extern uint8_t devChannel3Type;
extern uint8_t devChannel4Type;

extern uint32_t password;									//设备操作密码
extern uint32_t customerID;								//客户号（用于控制谁可以打开收运清理门）

extern uint8_t distance_L_DepthVal;				//设置左桶测距桶的深度（即内桶的高度）
extern uint8_t distance_L_MaxVal;					//设置左桶测距最大值（即安装最高点的值）
extern uint8_t distance_L_AlarmPercent;		//设置左桶测距装满报警百分比

extern uint8_t distance_R_MaxVal;					//设置右桶测距最大值（即安装最高点的值）
extern uint8_t distance_R_DepthVal;				//设置右桶测距桶的深度（即内桶的高度）
extern uint8_t distance_R_AlarmPercent;		//设置右桶测距装满报警百分比


extern uint8_t distanceParamAtStart;			//开始检测距离的起点距离参数
extern uint8_t PerCentSetVal;							//开始检测满溢的百分比设置值

extern uint8_t devChannel1DisDepthVal;				//设备通道满溢参数
extern uint8_t devChannel1DisMaxVal;
extern uint8_t devChannel1DisAlarmPercent;

extern uint8_t devChannel2DisDepthVal;				//设备通道满溢参数
extern uint8_t devChannel2DisMaxVal;
extern uint8_t devChannel2DisAlarmPercent;

extern uint8_t devChannel3DisDepthVal;				//设备通道满溢参数
extern uint8_t devChannel3DisMaxVal;
extern uint8_t devChannel3DisAlarmPercent;

extern uint8_t devChannel4DisDepthVal;				//设备通道满溢参数
extern uint8_t devChannel4DisMaxVal;
extern uint8_t devChannel4DisAlarmPercent;

extern uint8_t disableICCardFunStatus;		//启用/停用“禁用的IC卡不能开门”功能状态（1：停用功能；其它启用功能）
extern uint8_t enableCleanQRCodeStatus;		//启用/停用“收运二维码开门”功能状态（1：启用功能；其它停用功能）

extern uint8_t deviceIdLength;						//设备编号长度
extern uint8_t deviceIdBuf[33];						//设备编号

extern uint8_t ipAddr0, ipAddr1, ipAddr2, ipAddr3;		//服务器IP地址
extern uint16_t ipPort;

//取得的待修改后保存的参数变量（从flash中取出或者通过二维码取得的待保存和使用的参数变量）
extern uint8_t setDeviceType;							//设置的设备类型
extern uint8_t setDevChannelNumbers;			//设置时取得的投放口通道数量
extern uint8_t setDevChannel1Type;				//设置设备通道回收类型
extern uint8_t setDevChannel2Type;
extern uint8_t setDevChannel3Type;
extern uint8_t setDevChannel4Type;

extern uint32_t setPassword;							//要设置的设备操作密码
extern uint32_t setCustomerID;						//客户号（用于控制谁可以打开收运清理门）

extern uint8_t setDevChannel1DisDepthVal;		//设置桶的深度距离（即内桶的高度）
extern uint8_t setDevChannel1DisMaxVal;			//设置传感器安装高度距离最大值（即安装最高点的值）
extern uint8_t setDevChannel1DisAlarmPercent;//设置满溢距离报警百分比

extern uint8_t setDevChannel2DisDepthVal;
extern uint8_t setDevChannel2DisMaxVal;
extern uint8_t setDevChannel2DisAlarmPercent;

extern uint8_t setDevChannel3DisDepthVal;
extern uint8_t setDevChannel3DisMaxVal;
extern uint8_t setDevChannel3DisAlarmPercent;

extern uint8_t setDevChannel4DisDepthVal;
extern uint8_t setDevChannel4DisMaxVal;
extern uint8_t setDevChannel4DisAlarmPercent;

extern uint8_t setDisableICCardFunStatus;		//设置启用/停用“禁用的IC卡不能开门”功能状态（1：停用功能；其它启用功能）
extern uint8_t setEnableCleanQRCodeStatus;	//设置启用/停用“收运二维码开门”功能状态（1：启用功能；其它停用功能）

extern uint8_t setDeviceIdLength;					//取得的设备编号长度
extern uint8_t setDeviceIdBuf[33];				//取得的设备编号

extern uint8_t setIpAddr0, setIpAddr1, setIpAddr2, setIpAddr3;
extern uint16_t setIpPort;

//用户设置取得的参数变量
extern uint8_t getDeviceType;							//取得的设备类型
extern uint8_t getDevChannelNumbers;			//设置时取得的投放口通道数量
extern uint8_t getDevChannel1Type;				//取得的设备通道回收类型
extern uint8_t getDevChannel2Type;
extern uint8_t getDevChannel3Type;
extern uint8_t getDevChannel4Type;

extern uint32_t getConfirmPassword;				//取得确认密码
extern uint32_t getPassword;							//取得的设备操作密码
extern uint32_t getCustomerID;						//取得的客户号

extern uint8_t getDevChannel1DisDepthVal;		//设置桶的深度距离（即内桶的高度）
extern uint8_t getDevChannel1DisMaxVal;			//设置传感器安装高度距离最大值（即安装最高点的值）
extern uint8_t getDevChannel1DisAlarmPercent;//设置满溢距离报警百分比

extern uint8_t getDevChannel2DisDepthVal;
extern uint8_t getDevChannel2DisMaxVal;
extern uint8_t getDevChannel2DisAlarmPercent;

extern uint8_t getDevChannel3DisDepthVal;
extern uint8_t getDevChannel3DisMaxVal;
extern uint8_t getDevChannel3DisAlarmPercent;

extern uint8_t getDevChannel4DisDepthVal;
extern uint8_t getDevChannel4DisMaxVal;
extern uint8_t getDevChannel4DisAlarmPercent;

extern uint8_t getDisableICCardFunStatus;	//取得启用/停用“禁用的IC卡不能开门”功能状态（1：停用功能；其它启用功能）
extern uint8_t getEnableCleanQRCodeStatus;//取得启用/停用“收运二维码开门”功能状态（1：启用功能；其它停用功能）

extern uint8_t getDeviceIdLength;					//取得的设备编号长度
extern uint8_t getDeviceIdBuf[33];				//取得的设备编号

extern uint8_t getIpAddr0, getIpAddr1, getIpAddr2, getIpAddr3;
extern uint16_t getIpPort;

extern uint8_t getScaleNum;								//取得校准称盘的编号

//有取得相关参数标志
extern uint8_t setParamSaveMark;					//设置参数需要进行保存标志
extern uint8_t setParamChangeMark;				//设置参数有变化标志

extern uint8_t getConfirmPasswordMark;		//取得待确认密码标志
extern uint8_t getPasswordMark;						//取得要设置的密码标志
extern uint8_t getForceChangeMark;				//取得强制修改密码标志
extern uint8_t getDeviceTypeMark;					//取得设置设备类型标志
extern uint8_t getCustomerIDMark;					//取得设置客户号标志

extern uint8_t getDisableICCardFunMark;		//取得启用/停用“禁用的IC卡不能开门”功能标志
extern uint8_t getEnableCleanQRCodeMark;	//取得启用/停用“收运二维码开门”功能设置标志

extern uint8_t getOverflowSetMark;				//取得设置满溢参数标志

extern uint8_t getScaleCalibrationMark;		//取得称盘校准标志
extern uint8_t getBoxOpenMark;						//取得临时二维码开收运清理门标志
extern uint8_t getDeviceParamResetMark;		//取得恢复出厂设置
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

extern uint8_t deviceWorkStatus;					//设备工作状态（正常和停用）
extern uint8_t deviceWorkStatusPre;				//设备工作状态切换前的状态
extern uint8_t getDeviceWorkStatusVal;		//取得后台设置的工作状态值

extern uint8_t getMcu2SensorDataMark;			//取得MCU2发送的传感器数据标志

extern uint16_t netStatus;								//网络状态
extern uint16_t devRunnigStatus;					//设备启用状态
		 				    
#endif
