大理水控初始版本
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