大理水控初始版本
diff --git a/supwisdom/sp_config.h b/supwisdom/sp_config.h
new file mode 100644
index 0000000..81f4140
--- /dev/null
+++ b/supwisdom/sp_config.h
@@ -0,0 +1,280 @@
+#ifndef _SP_CONFIG_H
+#define _SP_CONFIG_H
+
+#include "sp_version.h"
+#include "../nec_hardware.h"
+
+#ifndef int8
+#define int8 signed char
+#endif
+
+#ifndef uint8
+#define uint8 unsigned char
+#endif
+
+#ifndef int16
+#define int16 signed short
+#endif
+
+#ifndef uint16
+#define uint16 unsigned short
+#endif
+
+#ifndef int32
+#define int32 signed int
+#endif
+
+#ifndef uint32
+#define uint32 unsigned int
+#endif
+
+#ifndef NULL
+#define NULL ((void *)0)
+#endif
+
+#define DEV_TYPE "G401302"
+#define DEV_OFFLINE_DEFAULT_HOUR 168
+#define DEV_BLKBITMAP_DONE 1984
+#define DEV_MAX_DEVICENO 99
+
+#define PRO_VERSION GIT_VERSION
+#define BUILD_DATE __DATE__ 		// " " __TIME__
+#ifdef FLOWSENSOR
+#define PURCHASE_FLOWSENSOR 1
+#else
+#define PURCHASE_FLOWSENSOR 0
+#endif
+
+enum
+{
+  SP_KEY_NONE = 0xFF,
+  SP_KEY_0 = 0,
+  SP_KEY_1 = 1,
+  SP_KEY_2 = 2,
+  SP_KEY_3 = 3,
+  SP_KEY_4 = 4,
+  SP_KEY_5 = 5,
+  SP_KEY_6 = 6,
+  SP_KEY_7 = 7,
+  SP_KEY_8 = 8,
+  SP_KEY_9 = 9,
+  SP_KEY_ENTER = 12,
+  SP_KEY_CLEAR = 11
+};
+
+typedef enum
+{
+  PAYMODE_INIT = 0,
+  PAYMODE_CARD = 1,
+  PAYMODE_QRCODE = 2,
+} sp_paymode_e;
+
+#pragma pack(push)
+#pragma pack(1)
+
+typedef struct
+{
+  uint8 command;
+  uint32 sendtime;
+} sp_comm_status_t;
+
+typedef struct
+{
+  uint32 last_heartbeat_ticker;
+  uint8 hwVer[16];				//É豸°æ±¾ºÅ
+  uint8 offlineRecordCount;		//δÉÏ´«Á÷Ë®ÊýÁ¿
+  uint8 workMode;				//µ±Ç°×´Ì¬£¬0-¿ÕÏУ¬1-ÕýÔÚʹÓã¬9-ÒÉËÆ¹ÊÕÏ
+  uint8 heart_status;	//ÐÄÌø×´Ì¬£¬0-³õʼ»¯£¬1-·¢ËÍ£¬2-½ÓÊÕ
+} sp_heartbeat_t;
+
+typedef struct
+{
+  uint32 last_login_ticker;
+  uint8 login_flag;			//0-δǩµ½£¬1-ÒÑÇ©µ½£¬2-×¢Ïú
+  uint8 hwVer[16];			//É豸°æ±¾ºÅ
+  uint8 deviceKey;			//É豸¹¤×÷ÃÜÔ¿
+} sp_login_t;
+
+//Ïû·ÑÁ÷Ë®ÐÅÏ¢½á¹¹
+typedef struct
+{
+  uint8 devphyid[4];	//É豸±àºÅ
+  uint8 transdate[3];	//YYDDMM¸ñʽÈÕÆÚ
+  uint8 transtime[3];
+  uint8 billno[10];		//½»Ò×¶©µ¥±àºÅ
+  uint8 cardphyid[4];	//¿¨ÎïÀíid
+  uint8 transway;		//½»Ò×·½Ê½£¬0-³õʼ£¬1-Ë¢¿¨£¬2-ɨÂë
+  uint8 amount;			//ʵ¼ÊÖ§¸¶½ð¶î
+  uint8 paidAmount;		//ÒÑÖ§¸¶½ð¶î£¬µ±ÊÇÏȿ۷ÑģʽÏ£¬¼Ç¼ÒÑÖ§¸¶µÄ½ð¶î
+  uint8 flowsensors;	//ʵ¼ÊʹÓüÆÁ¿£¨µ¥Î»£º°ÙºÁÉý£©
+  uint8 transtatus;		//Á÷ˮ״̬£¬0-³õʼ£¬1-³É¹¦£¬2-ʧ°Ü
+  uint8 reverse[1];		//ռλ·û
+  uint8 crc[2]; 		//len=32
+} sp_transdtl_t;
+
+typedef struct
+{
+  uint8 offline_work_hour;   	//ÔÊÐíÍÑ»ú¹¤×÷×î´óСʱ	  0 ~ 168 Сʱ£¬0 ±íʾ²»ÏÞÖÆ
+  uint8 deviceno; 				//»úºÅ
+  uint8 devphyid[4];			//ÎïÀíID
+  uint8 flowsensor_unit; 		// 100ml¶ÔÓ¦Âö³åÊý
+  uint8 unused[54];
+  uint8 login_flag; 			//0-δǩµ½£¬1-ÒÑÇ©µ½£¬2-ÒÑ×¢Ïú
+  uint8 crc[2];
+} sp_config_t;
+
+typedef struct
+{
+  uint32 transaddr;		//µØÖ·
+  uint16 this_offset;	//Ò³Æ«ÒÆÎ»
+  uint8 crc[2]; 		//len=8
+} sp_last_transdtl_t;
+
+typedef struct
+{
+  uint32 transaddr;		//µØÖ·
+  uint16 this_offset;	//Ò³Æ«ÒÆÎ»
+  uint8 crc[2]; 		//len=8
+} sp_unconfirm_transdtl_t;
+
+//Ïû·ÑÐÅÏ¢
+typedef struct
+{
+  uint32 free_used_num; //ÒÑÃâ·ÑʹÓüÆÁ¿(µ¥Î»:100ml)
+
+  uint8 starttime[6];  	//Ë¢¿¨Ê±¼ä
+  /*Ïȿۿîºó³öË®*/
+  uint16 prepaid_num;	//µ¥´Î¿ÉÓüÆÁ¿(µ¥Î»:100ml)
+  uint16 prepaid_amt;	//µ¥´ÎÔ¤¸¶½ðÇ®
+
+  uint16 paid_num; 		//ÀۼƿÉÓüÆÁ¿(µ¥Î»:100ml)
+  uint16 paid_sum;  	//ÀÛ¼ÆÖ§¸¶½ð¶î
+  uint16 used_num; 		//ÒÑʹÓüÆÁ¿(µ¥Î»:100ml)
+} sp_purchase_t;
+
+//¶þάÂëÐÅÏ¢
+typedef struct
+{
+  char qrcode_url[32]; 	///¶þάÂë¶ÌÂë
+  uint32 starttime;		//¶þάÂ뿪ʼʱ¼ä
+  uint32 nowtime;		//¶þάÂ뵱ǰʱ¼ä
+  uint32 validtime;		//¶þάÂëÓÐЧʱ¼ä
+  uint8 authstatus;		//Óû§È·ÈÏ״̬£¨0-δȷÈÏ£¬1-ÒÑÈ·ÈÏ£©
+  uint8 paystatus;		//Ö§¸¶×´Ì¬£¨0-´ýÖ§¸¶£¬ 1-ÒÑÖ§¸¶£¬ 2-´ú¿Û£¬3 - ¹Ø±Õ£©
+  uint8 paidAmount;		//µ±¶©µ¥ÊÇÒÑÖ§¸¶×´Ì¬£¬·µ»ØÖ§¸¶³É¹¦½ð¶î £¬ ·ñÔòÊÇ 0
+} sp_qrcode_t;
+
+//É豸²ÎÊý
+typedef struct
+{
+  uint8 dev_offline_maxhour;	//É豸ÍÑ»ú×î´ó¹¤×÷ʱ¼ä(Сʱ),0-²»ÏÞÖÆ,168-ĬÈÏʱ¼ä
+  uint8 flowsensor_unit; 		//100ml¶ÔÓ¦Âö³åÊý
+  uint8 hwVer[16];				//É豸°æ±¾ºÅ
+  uint8 deviceKey[8];				//É豸¹¤×÷ÃØÔ¿
+  uint8 work_mode;				//É豸¹¤×÷״̬
+} sp_sysconf_t;
+
+
+typedef struct
+{
+  uint8 tag_type;
+  uint8 cur_state;
+  uint8 snr[8];
+  uint32 firsttick;	//Ê״ζÁ¿¨Ê±¼ä
+  uint32 lasttick;	//×îºó¶Á¿¨Ê±¼ä
+} sp_cardstate_t;
+
+typedef struct
+{
+  uint8 current_state;	//µ±Ç°¹¤×÷״̬
+  uint16 errcode;
+  uint32 tick;
+  uint8 last_state;		//ÉÏÒ»´Î״̬
+
+  uint8 pause_status;	//Óû§Ê¹ÓÃ״̬£¬0--ʹÓÃÖУ¬!0--ÔÝÍ£
+  uint32 pause_tick;		//ÔÝͣʱµÄʱ¼ä
+} sp_cardworkstate_t;
+
+//Ë®¿ØÆ÷É豸ÐÅÏ¢
+typedef struct
+{
+  uint8 link_stat;			//0--Á´Â·¹¤×÷ÖУ¬1---Á´Â·¿ÉÓÃ
+  uint8 load_para_status;	//0--Õý³££¬!0--´íÎó
+  uint8 deviceno;
+  uint8 local_deviceno;		
+  uint8 devphyid[4];
+
+  sp_cardstate_t cardState;
+  sp_sysconf_t sysconf;
+  sp_comm_status_t last_comm_status;
+  sp_heartbeat_t heartbeat;
+  sp_login_t devlogin;
+  sp_last_transdtl_t last_transdtl;
+  sp_unconfirm_transdtl_t unconfirm_transdtl;
+
+  sp_paymode_e paymode;
+  sp_purchase_t purchase;
+} sp_pos_t;
+
+//·ÑÂÊÐÅÏ¢
+typedef struct
+{
+  uint8 fee_start;	//T°ÙºÁÉý¿ªÊ¼;
+  uint8 fee_unit;	//µ¥´Î¿Û·Ñ¿ÉÓÃÁ÷Á¿£¨µ¥Î»:100ml£©
+  uint8 fee_amt;	//µ¥´Î¿Û·Ñ½ð¶î£¬ÒÔ·ÖΪµ¥Î»
+} sp_feepara_t;
+
+//¿¨½á¹¹ÐÅÏ¢
+typedef struct
+{
+  uint8 cardphyid[4];
+  uint8 citizen_cardno[12];	//ÊÐÃñºÅ
+  uint8 cardtype;
+  uint8 expiredate[4];
+
+  uint8 waterlimit;		//µ¥´Î³öË®ÉÏÏÞ£¨100ml£©
+  uint8 billno[10];		//½»Ò×¶©µ¥±àºÅ,BCDÂë
+  sp_qrcode_t qrcode;	//¶þάÂë
+  sp_feepara_t feepara;
+} sp_card_t;
+
+#pragma pack(pop)
+
+typedef enum
+{
+  HEART_INIT = 0,
+  HEART_SEND = 1,
+  HEART_RECV = 2
+} sp_heart_status_t;
+
+typedef enum
+{
+  TAG_TYPE_UNKONWN = 0,  	//δ֪¿¨ÀàÐÍ
+  TAG_TYPE_M1,         		//M1¿¨
+  TAG_TYPE_CPU         		//CPU¿¨
+} sp_cardTag_type;
+
+typedef enum
+{
+  STATE_NONE = 0,
+  STATE_EXIST,
+  STATE_ERROR=0xFF
+} sp_cardState_type;
+
+typedef enum
+{
+  CARDWORKSTATUS_NONE = 0,
+  CARDWORKSTATUS_READY,
+  CARDWORKSTATUS_WORKING,
+  CARDWORKSTATUS_WORKING_WITHOUTCARD,
+  CARDWORKSTATUS_PAUSE,
+  CARDWORKSTATUS_STOPPING,
+  CARDWORKSTATUS_STOPPED,
+  CARDWORKSTATUS_TAKEOFF,
+  CARDWORKSTATUS_WORKERROR,
+  CARDWORKSTATUS_FEECARD_WORKING,
+  CARDWORKSTATUS_SET_DEV,
+  CARDWORKSTATUS_ERROR=0xff
+} sp_cardWorkState_type;
+
+#endif