/*************************** (C) COPYRIGHT 2017 YNHB ****************************
 * 文件名  ：display.c
 * 描  述  ：显示应用程序     
 * 版  本  ：V1.0
 * 作  者  ：XuZhongPing
 * 日  期  ：2017/10/16 
*********************************************************************************/
#include "timer.h"
#include "device.h"
#include "lcd.h"	
#include "display.h"
#include "key.h"
#include "gsm_gprs.h"
#include "data_typedef.h"	

/*
***********************************************************************
*	函 数 名: Screen_SystemInit
*	功能说明: 系统初始化
*	形    参：无
*	返 回 值: 无
***********************************************************************
*/
void Screen_SystemInit(void)
{
	LCD_ShowString(1, 0, "                ");
	LCD_ShowString(2, 0, "                ");
	LCD_ShowString(3, 0, "                ");
	
	LCD_ShowString(0, 0, "    绿色生活    ");
	LCD_ShowString(2, 0, "--系统正在启动--");
}

/*
***********************************************************************
*	函 数 名: GetDeviceTypeSimplifyString
*	功能说明: 取得设备类型字符串内容（简化）
*	形    参：
*	返 回 值: 
***********************************************************************
*/
void GetDeviceTypeSimplifyString(char *strOut, uint8_t type)
{
	switch(type)
	{
		case PAPER:
			sprintf(strOut, "%s", "纸");
			break;
			
		case PLASTIC:
			sprintf(strOut, "%s", "塑");
			break;
			
		case GLASS:
			sprintf(strOut, "%s", "玻");
			break;
			
		case METAL:
			sprintf(strOut, "%s", "金");
			break;
			
		case RECYCLED:
			sprintf(strOut, "%s", "可");
			break;
			
		case KITCHEN:
			sprintf(strOut, "%s", "厨");
			break;
			
		case SMALL_BOTTLE:
			sprintf(strOut, "%s", "瓶");
			break;
			
// 		case BIG_BOTTLE:
// 			sprintf(strOut, "%s", "瓶");
// 			break;
// 			
// 		case CANS:
// 			sprintf(strOut, "%s", "瓶");
// 			break;
			
		case BATTERY:
			sprintf(strOut, "%s", "电");
			break;
			
		case FABRIC:
			sprintf(strOut, "%s", "织");
			break;
			
		case BOOK:
			sprintf(strOut, "%s", "书");
			break;
			
		case NEWSPAPER:
			sprintf(strOut, "%s", "报");
			break;
			
		case PLASTIC_2:
			sprintf(strOut, "%s", "塑");
			break;
			
		case OTHER:
			sprintf(strOut, "%s", "其");
			break;
			
		case HARMFUL:
			sprintf(strOut, "%s", "害");
			break;
			
		case DRY_WASTES:
			sprintf(strOut, "%s", "干");
			break;
			
		case WET_WASTES:
			sprintf(strOut, "%s", "湿");
			break;
			
		default:
			sprintf(strOut, "%2d", type);
			break;
	}
}

/*
***********************************************************************
*	函 数 名: GetDeviceTypeString
*	功能说明: 取得设备类型字符串内容
*	形    参：
*	返 回 值: 
***********************************************************************
*/
void GetDeviceTypeString(char *strOut, uint8_t type)
{	
	switch(type)
	{
		case PAPER:
			sprintf(strOut, "%s", "纸类");
			break;
			
		case PLASTIC:
			sprintf(strOut, "%s", "塑料");
			break;
			
		case GLASS:
			sprintf(strOut, "%s", "玻璃");
			break;
			
		case METAL:
			sprintf(strOut, "%s", "金属");
			break;
			
		case RECYCLED:
			sprintf(strOut, "%s", "可回");
			break;
			
		case KITCHEN:
			sprintf(strOut, "%s", "厨余");
			break;
			
		case SMALL_BOTTLE:
			sprintf(strOut, "%s", "瓶子");
			break;
			
		case BIG_BOTTLE:
			sprintf(strOut, "%s", "瓶子");
			break;
			
		case CANS:
			sprintf(strOut, "%s", "瓶子");
			break;
			
		case BATTERY:
			sprintf(strOut, "%s", "电池");
			break;
			
		case FABRIC:
			sprintf(strOut, "%s", "织物");
			break;
			
		case BOOK:
			sprintf(strOut, "%s", "书本");
			break;
			
		case NEWSPAPER:
			sprintf(strOut, "%s", "报纸");
			break;
			
		case PLASTIC_2:
			sprintf(strOut, "%s", "塑料");
			break;
			
		case OTHER:
			sprintf(strOut, "%s", "其它");
			break;
			
		case HARMFUL:
			sprintf(strOut, "%s", "有害");
			break;
			
		case DRY_WASTES:
			sprintf(strOut, "%s", "干");
			break;
			
		case WET_WASTES:
			sprintf(strOut, "%s", "湿");
			break;
			
		default:
			sprintf(strOut, "%s", "    ");
			break;
	}
}

/*
***********************************************************************
*	函 数 名: Screen_ShowDeviceInfo
*	功能说明: 显示设备信息
*	形    参：
*	返 回 值: 无
***********************************************************************
*/
void Screen_ShowDeviceInfo(char *ver, uint8_t type1, uint8_t type2, uint8_t type3, uint8_t type4)
{
	char str[17];
	char str1[17];
	char str2[17];
	char str3[17];
	char str4[17];
	
	LCD_ShowString(1, 0, "                ");
	LCD_ShowString(2, 0, "                ");
	LCD_ShowString(3, 0, "                ");
	
	//得到要显示的类型信息
	GetDeviceTypeSimplifyString(str1, type1);
	GetDeviceTypeSimplifyString(str2, type2);
	GetDeviceTypeSimplifyString(str3, type3);
	GetDeviceTypeSimplifyString(str4, type4);
	
	switch(deviceType)
	{
		case THREE_CLASSIFICATION:		//三分类
			sprintf(str, "类型：%s%s%s", str1, str2, str3);
			break;
			
		case FOUR_CLASSIFICATION:		//四分类
			sprintf(str, "类型：%s%s%s%s", str1, str2, str3, str4);
			break;
	}
	
	LCD_ShowString(0, 2, "设备信息");
	LCD_ShowString(2, 0, VersionStr);
	
// 	LCD_ShowString(3, 0, str);
}

/*
***********************************************************************
*	函 数 名: BootScreen
*	功能说明: 开机画面
*	形    参：无
*	返 回 值: 无
***********************************************************************
*/
void BootScreen(void)
{
	static uint8_t displayStatus = 0x00;
	static uint8_t connectingOK = 0;

	static timer switchScreenTimer;
	static uint8_t timer_ok = 0;

	if(timer_ok == 0)
	{
		timer_ok = 1;
		timer_set(&switchScreenTimer, CLOCK_SECOND*1);
		
		LCD_ShowString(1, 0, "                ");
		LCD_ShowString(2, 0, "                ");
		LCD_ShowString(3, 0, "                ");
		
		LCD_ShowString(0, 2, "欢迎使用");
		LCD_ShowString(2, 0, "    连接中      ");
		
	}	

	if(connectingOK == 0)					//检查是否已经连接上后台
	{
		if(gsm_msg.Running == 1)		//已经连接上后台，退出开机画面
		{
			connectingOK = 1;
		}
		
		if(timer_expired(&switchScreenTimer))
		{
			timer_restart(&switchScreenTimer);
			switch(displayStatus)
			{
				case 0x00:
					LCD_ShowString(2, 0, "                ");
					LCD_ShowString(2, 0, "    连接中.     ");
					break;
					
				case 0x01:
					LCD_ShowString(2, 0, "    连接中..    ");
					break;
					
				case 0x02:
					LCD_ShowString(2, 0, "    连接中...   ");
					break;
					
				case 0x03:
					LCD_ShowString(2, 0, "                ");
					LCD_ShowString(2, 0, "    连接中      ");
					break;
			}
			
			displayStatus++;
			if(displayStatus > 3)
			{
				displayStatus = 0;
			}
		}
	}
}

/*
***********************************************************************
*	函 数 名: Screen_Default
*	功能说明: 默认界面（主界面）
*	形    参：无
*	返 回 值: 无
***********************************************************************
*/
void Screen_Default(void)
{
	LCD_Init();
	
	LCD_ShowString(0, 0, "                ");
	LCD_ShowString(1, 0, "                ");
	LCD_ShowString(2, 0, "                ");
	LCD_ShowString(3, 0, "                ");
	
// 	LCD_ShowString(0, 2, "叙创科技");
// 	LCD_ShowString(0, 2, "粤能环保");
// 	LCD_ShowString(0, 2, "领军环保");


// 	LCD_ShowString(0, 2, "绿色生活");
// 	LCD_ShowString(2, 0, "  请扫码或刷卡  ");
// 	LCD_ShowString(3, 0, "    开门投放    ");
	
	
	LCD_ShowString(0, 1, "  绿色生活    ");
	LCD_ShowString(2, 0, "欢迎您扫码或刷卡");
	LCD_ShowString(3, 0, "    开门投放    ");
	
	
// 	LCD_ShowString(0, 1, "青岛蔚蓝中天");
// 	LCD_ShowString(2, 0, "欢迎您扫码或刷卡");
// 	LCD_ShowString(3, 0, "    开门投放    ");
	
	if((signal > 0) && (signal <= 32))
	{
		LCD_ShowSignal((signal+3)/8);
	}
}

/*
***********************************************************************
*	函 数 名: Screen_DeviceDisable
*	功能说明: 设备禁用界面
*	形    参：无
*	返 回 值: 无
***********************************************************************
*/
void Screen_DeviceDisable(void)
{
	LCD_ShowString(1, 0, "                ");
	LCD_ShowString(2, 0, "                ");
	LCD_ShowString(3, 0, "                ");


	LCD_ShowString(0, 2, "绿色生活");
	LCD_ShowString(2, 0, "  设备正在维护  ");
	LCD_ShowString(3, 0, "    暂停使用    ");
}

/*
***********************************************************************
*	函 数 名: Screen_Landing
*	功能说明: 正在登陆加载用户数据
*	形    参：无
*	返 回 值: 无
***********************************************************************
*/
void Screen_Landing(void)
{
	LCD_ShowString(1, 0, "                ");
	LCD_ShowString(2, 0, "                ");
	LCD_ShowString(3, 0, "                ");
	
	LCD_ShowString(2, 0, "  正在加载...   ");
}

/*
***********************************************************************
*	函 数 名: Screen_Query
*	功能说明: 用户信息查询界面
*	形    参：auth -> 是否通过
*						mode -> 显示账号还是IC卡号（0：账号，1：IC卡号）
*						inputAccount -> 用户账号
*						inputBalance -> 用户余额
*	返 回 值: 无
***********************************************************************
*/
void Screen_Query(uint8_t auth, uint8_t mode, uint8_t *icCard, uint32_t inputAccount, uint32_t inputBalance)
{	
	uint8_t i;
	double tempData;			
	char str1[17];
	char str2[17];
	char icCardNumAfter6[7] = {0, 0, 0, 0, 0, 0, '\0'};				//卡号后6位
	
	LCD_ShowString(1, 0, "                ");
	LCD_ShowString(2, 0, "                ");
	LCD_ShowString(3, 0, "                ");
	
	switch(auth)
	{
		case 0x01:
// 			printf("\r\n认证通过\r\n");
	
			if(mode)
			{
				for(i = 0; i < 6; i++)		//取出IC卡后6位进行显示
				{
					icCardNumAfter6[i] = icCard[11 + i] + '0';
				}
		
				sprintf(str1, "卡号：***%s ", icCardNumAfter6);
				sprintf(str2, "余额：%.2f", (float)inputBalance/100);
			}else{
				sprintf(str1, "账号：%d", inputAccount);
				sprintf(str2, "余额：%.2f", (float)inputBalance/100);
			}
			
			if(synchronousOpenDoorMark == 0)
			{
				LCD_ShowString(1, 0, "（请选投放类型）");
			}
			LCD_ShowString(2, 0, str1);
			LCD_ShowString(3, 0, str2);
			break;
			
		case 0x02:
			printf("\r\n余额不足\r\n");
			LCD_ShowString(2, 0, "  （余额不足）  ");
			break;
			
		case 0x03:
			printf("\r\n卡号被禁用\r\n");
			LCD_ShowString(2, 0, "  （卡被禁用）  ");
			break;
			
		case 0x04:
			printf("\r\n其他错误\r\n");
			LCD_ShowString(2, 0, "  （IC卡无效）  ");
			break;
			
		case 0x05:
			printf("\r\n身份无效\r\n");
			LCD_ShowString(2, 0, "  （身份无效）  ");
			LCD_ShowString(3, 0, "投放无法获得奖励");
			break;
			
		default:
			break;
	}
}

/*
***********************************************************************
*	函 数 名: Screen_Query
*	功能说明: 用户信息查询界面
*	形    参：auth -> 是否通过
*						mode -> 显示账号还是IC卡号（0：账号，1：IC卡号）
*						inputAccount -> 用户账号
*						inputBalance -> 用户余额
*	返 回 值: 无
***********************************************************************
*/
void Screen_UserInfo(uint8_t auth, uint8_t mode, uint8_t *icCard, uint32_t inputAccount, uint32_t inputBalance)
{	
	uint8_t i;
	double tempData;			
	char str1[17];
	char str2[17];
	char icCardNumAfter6[7] = {0, 0, 0, 0, 0, 0, '\0'};				//卡号后6位
	
	LCD_ShowString(1, 0, "                ");
	LCD_ShowString(2, 0, "                ");
	LCD_ShowString(3, 0, "                ");
	
	switch(auth)
	{
		case 0x01:
			printf("\r\n认证通过\r\n");
	
			if(mode)
			{
				for(i = 0; i < 6; i++)		//取出IC卡后6位进行显示
				{
					icCardNumAfter6[i] = icCard[11 + i] + '0';
				}
		
				sprintf(str1, "卡号：***%s ", icCardNumAfter6);
				sprintf(str2, "余额：%.2f", (float)inputBalance/100);
			}else{
				sprintf(str1, "账号：%d", inputAccount);
				sprintf(str2, "余额：%.2f", (float)inputBalance/100);
			}
			
			LCD_ShowString(1, 0, str1);
			LCD_ShowString(2, 0, str2);
			break;
			
		case 0x02:
// 			printf("\r\n余额不足\r\n");
			LCD_ShowString(2, 0, "  （余额不足）  ");
			break;
			
		case 0x03:
// 			printf("\r\n卡号被禁用\r\n");
			LCD_ShowString(2, 0, "  （卡被禁用）  ");
			break;
			
		case 0x04:
// 			printf("\r\n其他错误\r\n");
			LCD_ShowString(2, 0, "  （IC卡无效）  ");
			break;
			
		case 0x05:
// 			printf("\r\n身份无效\r\n");
			LCD_ShowString(1, 0, "  （身份无效）  ");
			LCD_ShowString(2, 0, "投放无法获得奖励");
			break;
			
		case 0x06:
// 			printf("\r\n正在加载...\r\n");
			LCD_ShowString(2, 0, "  正在加载...   ");
			break;
			
		default:
			break;
	}
}

/*
***********************************************************************
*	函 数 名: Screen_Query
*	功能说明: 用户信息查询界面
*	形    参：timerVal -> 剩余关门时间
*	返 回 值: 无
***********************************************************************
*/
void Screen_Countdown(uint8_t timerVal)
{	
	double tempData;			
	char str1[17];
	
	LCD_ShowString(3, 0, "                ");
	
	if(timerVal != 0)
	{
		sprintf(str1, "     %3d秒后关门", timerVal);
	}else{
		sprintf(str1, "        正在关门");
	}
	
	LCD_ShowString(3, 0, str1);
	
}

/*
***********************************************************************
*	函 数 名: ShowWeightInfo
*	功能说明: 显示对应箱体的投放信息
*	形    参：num -> 哪一个箱体（0：左箱；1：右箱）
*						type -> 可回收物的类型
*						inputVal -> 对应的数值
*	返 回 值: 无
***********************************************************************
*/
static void ShowWeightInfo(uint8_t num, uint8_t type, uint16_t inputVal)
{
	char str[17];
	
	//得到要显示的类型信息
	switch(type)
	{
		case PAPER:
			sprintf(str, "纸类：%2.2f Kg", (float)inputVal/100);
			break;
			
		case PLASTIC:
			sprintf(str, "塑料：%2.2f Kg", (float)inputVal/100);
			break;
			
		case GLASS:
			sprintf(str, "玻璃：%2.2f Kg", (float)inputVal/100);
			break;
			
		case METAL:
			sprintf(str, "金属：%2.2f Kg", (float)inputVal/100);
			break;
			
		case RECYCLED:
			sprintf(str, "可回收：%2.2f Kg", (float)inputVal/100);
			break;
			
		case KITCHEN:
			if((leftBarrelType == RECYCLED) || (rightBarrelType == RECYCLED))
			{
				sprintf(str, "厨  余：%2.2f Kg", (float)inputVal/100);
			}else{
				sprintf(str, "厨余：%2.2f Kg", (float)inputVal/100);
			}
			break;
			
		case SMALL_BOTTLE:
			sprintf(str, "瓶子：%3d 个", inputVal);
			break;
			
		case BIG_BOTTLE:
			sprintf(str, "瓶子：%3d 个", inputVal);
			break;
			
		case CANS:
			sprintf(str, "瓶子：%3d 个", inputVal);
			break;
			
		case BATTERY:
			sprintf(str, "电池：%2.2f Kg", (float)inputVal/100);
			break;
			
		case FABRIC:
			sprintf(str, "织物：%2.2f Kg", (float)inputVal/100);
			break;
			
		case BOOK:
			sprintf(str, "书本：%2.2f Kg", (float)inputVal/100);
			break;
			
		case NEWSPAPER:
			sprintf(str, "报纸：%2.2f Kg", (float)inputVal/100);
			break;
			
		case KITCHEN_1:
			sprintf(str, "重量：%2.2f Kg", (float)inputVal/100);
			break;
			
		case KITCHEN_2:
			sprintf(str, "重量：%2.2f Kg", (float)inputVal/100);
			break;
			
		case PLASTIC_2:
			sprintf(str, "塑料：%2.2f Kg", (float)inputVal/100);
			break;
			
		case OTHER:
			if((leftBarrelType == RECYCLED) || (rightBarrelType == RECYCLED))
			{
				sprintf(str, "其  它：%2.2f Kg", (float)inputVal/100);
			}else{
				sprintf(str, "其它：%2.2f Kg", (float)inputVal/100);
			}
			break;
			
		case HARMFUL:
			if((leftBarrelType == RECYCLED) || (rightBarrelType == RECYCLED))
			{
				sprintf(str, "有  害：%2.2f Kg", (float)inputVal/100);
			}else{
				sprintf(str, "有害：%2.2f Kg", (float)inputVal/100);
			}
			break;
			
		case DRY_WASTES:
			sprintf(str, "干垃圾：%2.2f Kg", (float)inputVal/100);
			break;
			
		case WET_WASTES:
			sprintf(str, "湿垃圾：%2.2f Kg", (float)inputVal/100);
			break;
			
		default:
			sprintf(str, "重量：%2.2f Kg", (float)inputVal/100);
			break;
	}
			
	//对应于箱体显示（左箱和右箱分别显示于不同的区域）
	switch(num)
	{
		case 0:		//左箱
			LCD_ShowString(2, 0, str);
			break;
			
		case 1:		//右箱
			LCD_ShowString(3, 0, str);
			break;
			
		default:
			break;
	}
}

/*
***********************************************************************
*	函 数 名: Screen_ShowPutInInfo
*	功能说明: 显示本次投放的信息
*	形    参：type -> 箱体类型
*						leftType -> 左箱可回收物类型
*						rightType -> 右箱可回收物类型
*						leftVal -> 左箱投放数值
*						rightVal -> 右箱投放数值
*	返 回 值: 无
***********************************************************************
*/
void Screen_ShowPutInInfo(uint8_t type, uint8_t leftType, uint8_t rightType, uint16_t leftVal, uint16_t rightVal)
{	
	LCD_ShowString(1, 0, "                ");
	LCD_ShowString(2, 0, "                ");
	LCD_ShowString(3, 0, "                ");
	
	switch(type)
	{
		case DOUBLE_CLASSIFICATION:					//双桶480L
			ShowWeightInfo(0, leftType, leftVal);
			ShowWeightInfo(1, rightType, rightVal);
			break;
			
		case DOUBLE_CLASSIFICATION_BOTTLE:		//双桶480L含瓶类
			ShowWeightInfo(0, leftType, leftVal);
			ShowWeightInfo(1, rightType, rightVal);
			break;
			
		case SINGLE_CLASSIFICATION:					//单桶660L
			ShowWeightInfo(0, leftType, leftVal);
			break;
			
		default:
			break;
	}
}

/*
***********************************************************************
*	函 数 名: Screen_ShowPutInInfo
*	功能说明: 显示本次投放的信息
*	形    参：type -> 箱体类型
*						leftType -> 左箱可回收物类型
*						rightType -> 右箱可回收物类型
*						leftVal -> 左箱投放数值
*						rightVal -> 右箱投放数值
*	返 回 值: 无
***********************************************************************
*/
void Screen_ShowPutInInfo2(uint16_t val1, uint16_t val2, uint16_t val3, uint16_t val4)
{	
	char str[17];
	char str1[17];
	char str2[17];
	char str3[17];
	char str4[17];
	
	LCD_DrawModeCtrl(0);
	
	LCD_ShowString(0, 0, "                ");
	LCD_ShowString(1, 0, "                ");
	LCD_ShowString(2, 0, "                ");
	LCD_ShowString(3, 0, "                ");
	
	GetDeviceTypeString(str, devChannel1Type);
	sprintf(str1, "%s：%2.2f Kg", str, (float)val1/100);
	GetDeviceTypeString(str, devChannel2Type);
	sprintf(str2, "%s：%2.2f Kg", str, (float)val2/100);
	GetDeviceTypeString(str, devChannel3Type);
	sprintf(str3, "%s：%2.2f Kg", str, (float)val3/100);
	GetDeviceTypeString(str, devChannel4Type);
	sprintf(str4, "%s：%2.2f Kg", str, (float)val4/100);
	
	switch(deviceType)
	{
		case THREE_CLASSIFICATION:		//三分类
			LCD_ShowString(1, 0, str1);
			LCD_ShowString(2, 0, str2);
			LCD_ShowString(3, 0, str3);
			break;
			
		case FOUR_CLASSIFICATION:		//四分类
			LCD_ShowString(0, 0, str1);
			LCD_ShowString(1, 0, str2);
			LCD_ShowString(2, 0, str3);
			LCD_ShowString(3, 0, str4);
			break;
	}
}

/*
***********************************************************************
*	函 数 名: Screen_ShowPutInReward
*	功能说明: 显示投放奖励信息
*	形    参：beforeCapital -> 投放前的金额
*						afterCapital -> 投放后的金额
*	返 回 值: 无
***********************************************************************
*/
void Screen_ShowPutInReward(uint32_t beforeCapital, uint32_t afterCapital)
{
	char str1[17];
	char str2[17];
	uint32_t temp = 0;
	
	if(beforeCapital <= afterCapital)
	{
		temp = afterCapital - beforeCapital;
	}
	
	sprintf(str1, "奖励：%.2f", (float)temp/100);
	sprintf(str2, "余额：%.2f", (float)afterCapital/100);
	
	LCD_ShowString(0, 0, "                ");
	LCD_ShowString(1, 0, "                ");
	LCD_ShowString(2, 0, "                ");
	LCD_ShowString(3, 0, "                ");
	
	LCD_ShowString(0, 2, "绿色生活");
	LCD_ShowString(2, 0, str1);
	LCD_ShowString(3, 0, str2);
	
	LCD_DrawModeCtrl(1);
}

/*
***********************************************************************
*	函 数 名: Screen_Exit
*	功能说明: 退出使用
*	形    参：无
*	返 回 值: 无
***********************************************************************
*/
void Screen_Exit(void)
{
	LCD_ShowString(0, 0, "                ");
	LCD_ShowString(1, 0, "                ");
	LCD_ShowString(2, 0, "                ");
	LCD_ShowString(3, 0, "                ");
	
// 	LCD_ShowString(2, 0, "    谢谢使用    ");
	
	LCD_ShowString(0, 2, "绿色生活");
	LCD_ShowString(2, 0, "★感谢您为地球★");
	LCD_ShowString(3, 0, "  增添一份美丽  ");
	
	LCD_DrawModeCtrl(1);
}

/*
***********************************************************************
*	函 数 名: Screen_ShowFull
*	功能说明: 显示装满
*	形    参：无
*	返 回 值: 无
***********************************************************************
*/
void Screen_ShowFull(void)
{
	LCD_ShowString(1, 0, "                ");
	LCD_ShowString(2, 0, "                ");
	LCD_ShowString(3, 0, "                ");
	
	LCD_ShowString(2, 0, "箱已装满暂停使用");
	
// 	LCD_ShowString(2, 0, "    箱已装满    ");
// 	LCD_ShowString(3, 0, "    暂停使用    ");
}

/*
***********************************************************************
*	函 数 名: Screen_Error
*	功能说明: 显示设备运转错误
*	形    参：type -> 箱体类型（0：单桶，1：双桶）
*						pre1 -> 左边箱体故障码
*						pre2 -> 右边箱体故障码
*	返 回 值: 无
***********************************************************************
*/
void Screen_Error(uint8_t type, uint8_t pre1, uint8_t pre2)
{
	char str[17];
	
	if(type)		//双桶
	{
		sprintf(str, "故障码：%3d %3d", pre1, pre2);
	}else{			//单桶
		sprintf(str, "故障码：%3d", pre1);
	}
	
	LCD_ShowString(1, 0, "                ");
	LCD_ShowString(2, 0, "                ");
	LCD_ShowString(3, 0, "                ");
	
	LCD_ShowString(2, 0, "设备故障暂停使用");
	LCD_ShowString(3, 0, str);
}

/*
***********************************************************************
*	函 数 名: Screen_ScaleCalibraEnter
*	功能说明: 显示称盘正在进入校准
*	形    参：num -> 称盘编号
*	返 回 值: 无
***********************************************************************
*/
void Screen_ScaleCalibraEnter(uint8_t num)
{
	char str1[17];
	
	sprintf(str1, "校准称盘：%d", num);
	
	LCD_ShowString(1, 0, "                ");
	LCD_ShowString(2, 0, "                ");
	LCD_ShowString(3, 0, "                ");
	
	LCD_ShowString(2, 0, str1);
	LCD_ShowString(3, 0, "->正在进入校准");
}

/*
***********************************************************************
*	函 数 名: Screen_ScaleCalibraStart
*	功能说明: 显示称盘正在进入校准
*	形    参：num -> 称盘编号
*	返 回 值: 无
***********************************************************************
*/
void Screen_ScaleCalibraStart(uint8_t num)
{
	char str1[17];
	
	sprintf(str1, "校准称盘：%d", num);
	
	LCD_ShowString(1, 0, "                ");
	LCD_ShowString(2, 0, "                ");
	LCD_ShowString(3, 0, "                ");
	
	LCD_ShowString(2, 0, str1);
	LCD_ShowString(3, 0, "->请放入10Kg砝码");
}

/*
***********************************************************************
*	函 数 名: Screen_ScaleCalibraFinish
*	功能说明: 显示称盘正在进入校准
*	形    参：num -> 称盘编号
*	返 回 值: 无
***********************************************************************
*/
void Screen_ScaleCalibraFinish(uint8_t num)
{
	char str1[17];
	
	sprintf(str1, "校准称盘：%d", num);
	
	LCD_ShowString(1, 0, "                ");
	LCD_ShowString(2, 0, "                ");
	LCD_ShowString(3, 0, "                ");
	
	LCD_ShowString(2, 0, str1);
	LCD_ShowString(3, 0, "->校准完成！");
}

/*
***********************************************************************
*	函 数 名: DispalyTask
*	功能说明: 显示任务（需要实时更新的界面）
*	形    参：无
*	返 回 值: 无
***********************************************************************
*/
void DispalyTask(void)
{
	static uint8_t preSignal = 0;
	static uint8_t preSimCardStatus = 0;
	static uint8_t initScreen = 0;
	static uint8_t showStatus = 0x00;
	
	static timer showVersionTimer;
	static timer waitingTimer_5S;
	static timer waitingTimer;
	
	static uint8_t timer_ok = 0;

	if(timer_ok == 0)
	{
		timer_ok = 1;
		timer_set(&showVersionTimer, CLOCK_SECOND*5);
		timer_set(&waitingTimer_5S, CLOCK_SECOND*5);
		timer_set(&waitingTimer, CLOCK_SECOND*60);		
	}
	
	switch(showStatus)
	{
		case 0x00:
			if(timer_expired(&showVersionTimer))
			{
				showStatus = 0x02;
			}
			break;
			
		case 0x01:
			if(timer_expired(&showVersionTimer))
			{
				showStatus = 0x02;
			}
			break;
			
		case 0x02:
			if(initScreen == 0)
			{
				BootScreen();	
				
				if(gsm_msg.Running == 1)		//已经连接上后台，退出开机画面
				{
					initScreen = 1;
					Screen_Default();
					showStatus = 0x03;
				}
				
				if(timer_expired(&waitingTimer))
				{
					initScreen = 1;
					Screen_Default();
					showStatus = 0x03;
				}
			}
			break;
			
		case 0x03:
			
			break;
	}
	
//SIM卡状态显示	
	if(gsm_msg.simCardStatus != preSimCardStatus)
	{
		preSimCardStatus = gsm_msg.simCardStatus;
		
		if(gsm_msg.simCardStatus == 2)
		{
			LCD_ShowSignal(5);												//显示无法注册网络
		}else if(gsm_msg.simCardStatus == 3){
			LCD_ShowSignal(6);												//没有GPRS业务
		}else if(gsm_msg.simCardStatus == 4){
			LCD_ShowSignal(7);												//没有检测到卡
		}else{
		}
	}
	
	if(signal != preSignal)
	{
// 		printf("\r\n更新信号显示%d\r\n", signal);
		preSignal = signal;
		if((signal > 0) && (signal <= 32))
		{
			LCD_ShowSignal((signal+3)/8);
		}
	}
}

/******************** (C) COPYRIGHT 2017 YNHB *****END OF FILE*******************/ 
