/*******************************************************************************
*
*    Copyright(C) 2012 WANG XIBING All rights reserved.
*
* 文件：meter.h
* 作者：wxb
* 版本：V1.00
* 日期：2012-1-1
* 描述：主头文件
* 属性：RL78
* 修改：V1.00, 2012-1-1, wxb, 创建本文件
*
* 声明：本程序所有权归作者所有。
*       本程序仅用于实现特定产品的功能，任何修改或其它目的的应用均不作保证，
*       任何人未经作者同意不得将本程序的全部或部分用于商业目的。
*******************************************************************************/
#ifndef __METER_CARD_5557_APP_H__
#define __METER_CARD_5557_APP_H__
#include "ddl.h"
#include "type.h"

//状态机状态
#define CARD_KEY_M_S0 0              //卡按键驱动状态机状态号
#define CARD_KEY_M_S1 1              //卡按键驱动状态机状态号
#define CARD_KEY_M_S2 2              //卡按键驱动状态机状态号
#define CARD_KEY_M_S3 3              //卡按键驱动状态机状态号
#define CARD_KEY_M_S4 4              //卡按键驱动状态机状态号
#define CARD_KEY_M_S5 5              //卡按键驱动状态机状态号
#define CARD_KEY_M_S6 6              //卡按键驱动状态机状态号
#define CARD_KEY_M_S7 7              //卡按键驱动状态机状态号
#define CARD_KEY_M_S8 8              //卡按键驱动状态机状态号
#define CARD_KEY_M_S9 9              //卡按键驱动状态机状态号

#define CARD_KEY_TIME_SECOND   30//30s,选用5ms当量定时器
#define CARD_SEACHR_TIME_SECOND   1//2s


#define CARD_NONE_MSG			  	0x00		//无消息
#define CARD_IN					  		0x01		//有卡
#define CARD_OPEN					  	0x02		//开阀
#define CARD_CLOSE			      0x04		//关阀



#define OPEN_ACCOUNT_CARD			0x01		//开户卡
#define USE_CARD							0x11		//用户卡
#define USE_CARD_2						0x22		//用户卡
#define AREA_CARD							0x30		//区域代码设置卡
#define CHECK_CARD						0x31		//查询卡
#define REPURCHASE_CARD				0x32		//退购卡
#define CLEARED_CARD					0x33		//清零卡
#define OPEN_VALVE_CARD				0x34		//开阀卡
#define CLOSE_VALVE_CARD			0x35		//关阀卡
#define CHANGE_CARD						0x36		//换表卡
#define IDSET_CARD						0x37		//表号设置卡
#define CONFIGURATION1_CARD		0x41		//配置卡1
#define CONFIGURATION2_CARD		0x42		//配置卡2
#define SET_CARD							0x43		//设置卡
#define INIT_CARD							0x44		//初始化参数卡
#define CHECK_ERR_CARD				0x45		//故障查询卡
#define CLEAR_ERR_CARD				0x46		//清故障卡
typedef union
{
    struct
    {
        u8 byte0;
        u8 byte1;

    } byte;
    u16 datas;
} U16_DATA;
typedef union
{
    struct
    {
        u8 byte0;
        u8 byte1;

    } byte;
    s16 datas;
} S16_DATA;
typedef union
{
    struct
    {
        u8 card_flag;
        u8 buy_value[3];								// 本次购买量
        U16_DATA company_number;		    	//公司标志
        U16_DATA zone_number;							//区域代码
        u8 card_number[3];							//卡号
        u8 write_succ_flag;								//卡片反写成功标志
        u8 value_limit[3];             //可用剩余量
        u8 check;													//校验
        U16_DATA buy_num;                 //购买次数
        u8 total_value[3];     	      //累积量
        u8 hoarding_value[3];					//囤积量
        u8 code[4];
    };

    u8 data[28];
} Card_Data;
typedef union
{
    struct
    {
        u8 card_flag;
        u8 idle;
        S16_DATA level_1_arrears_threshold ;					//一级欠费阈值
        S16_DATA level_2_arrears_threshold ;					//二级欠费阈值
        u8 valve_type;																//阀门类型
        u8 battery_type;															//电池类型
        u8 magnetic_interference_close_valve;					//磁干扰是否关阀
        u8 valve_power_order;													//阀门供电线序
        u8 valve_inplace_order;												//阀门到位线序
        u8 write_succ_flag;								//卡片反写成功标志
        u8 valve_adc_current_thd;											//阀门堵转电流阈值
        u8 valve_time_s;															//控阀时间
        u8 idle2[10];
        u8 code[4];

    };
    u8 data[28];
} S_Card_Type1_Data;


void SearchCardApp(void);
u8 CheckCardMsg(void);
void ClearCardMsg(u8 data);
void CardDataProcessorApp(void);
void CardKeyMsgMachine(void);
void CardMachine(void);

#endif /*__METER_CARD_5557_APP_H__*/
