大理水控初始版本
diff --git a/supwisdom/sp_communicate.h b/supwisdom/sp_communicate.h
new file mode 100644
index 0000000..b8daf77
--- /dev/null
+++ b/supwisdom/sp_communicate.h
@@ -0,0 +1,139 @@
+#ifndef _SP_COMMUNICATE_H_
+#define _SP_COMMUNICATE_H_
+
+#include "sp_config.h"
+
+#define PROTOCOL_COMMAND_V2 		0x80
+#define PROTOCOL_WITH_MAC(x) 		((x) | 0x80)
+#define PROTOCOL_WITHOUT_MAC(x) 	((x) & 0x7F)
+#define PROTOCOL_FLAG_PACK(x) 		((x) | 0x01)
+#define PROTOCOL_FLAG_DES_PACK(x) 	((x) & 0xFE)
+
+#define PK_BIN_DEVPHYID 			"a"
+#define PK_INT_CARDNO 				"b"
+#define PK_BIN_CARDVERNO 			"c"
+#define PK_INT_DEVSEQNO 			"d"
+#define PK_STR_VERSION 				"e"
+#define PK_INT_BLKINDEX 			"f"
+#define PK_BIN_TRANSDATE 			"g"
+#define PK_BIN_TRANSTIME 			"h"
+#define PK_INT_PAYAMT 				"i"
+#define PK_INT_AMOUNT 				"j"
+#define PK_INT_FLAG 				"k"
+#define PK_STR_AVAIABLE 			"l"
+#define PK_BIN_SYSTIME 				"m"
+#define PK_STR_UPGRADE 				"n"
+#define PK_BIN_BLKBITMAP 			"o"
+#define PK_BIN_FILECRC 				"p"
+#define PK_INT_FILESIZE 			"q"
+#define PK_INT_SEQNO 				"r"
+#define PK_BIN_FILEDATA 			"s"
+#define PK_INT_MAXSEQNO 			"t"
+#define PK_INT_SECONDS 				"u"
+#define PK_INT_CREDIT_TOTAL  		"v"
+#define PK_INT_CREDIT_PAYCNT  		"w"
+#define PK_INT_CREDIT_AVAILABAL  	"x"
+#define PK_INT_CREDIT_NO  			"y"
+#define PK_BIN_EXPIRE  				"z"
+#define PK_INT_FEETYPE  			"A"
+#define PK_BIN_CARDPHYID  			"B"
+#define PK_STR_STATUS  				"C"
+#define PK_INT_BALANCE  			"D"
+#define PK_INT_OFFLINE_FORBID_FLAG  "E"
+#define PK_INT_CREDIT_PAYCNT_LACK  	"F"
+#define PK_INT_ONCETIME_LIMIT  		"G"
+#define PK_INT_DAYTOTAL_LIMIT  		"H"
+#define PK_INT_COUNT 				"J"
+#define PK_BIN_BLKLIST 				"K"
+#define PK_INT_CREDIT_NEXT_NO 		"L"
+#define PK_BIN_RANDOM  				"M"
+#define PK_INT_DEVICENO  			"N"
+#define PK_BIN_DEVTIME  			"O"
+#define PK_STR_DEVTYPE  			"P"
+#define PK_BIN_SAMNO  				"Q"
+#define PK_INT_PARAVERNO  			"R"
+#define PK_INT_PARA_GROUPID  		"S"
+#define PK_INT_FEEVERNO  			"T"
+#define PK_INT_FEE_CFGID  			"U"
+#define PK_BIN_WSCLIENT_ID  		"V"
+#define PK_INT_WSCLIENT_STATUS  	"W"
+#define PK_INT_FLOWSENSORS			"X"
+#define PK_BIN_SOFT_MD5  			"Y"
+#define PK_INT_CUSTID				"Z"
+#define PK_STR_SHORT_URL			"0"
+#define PK_INT_WATERSTATUS  		"1"
+#define PK_INT_WATERMUCH  			"2"
+
+#define PK_BIN_BILLNO 				"3"
+#define PK_INT_TRANSWAY 			"4"
+#define PK_INT_UNTRANSCONST 		"5"
+#define PK_BIN_DEVICEKEY 			"6"
+#define PK_INT_WORKMODE 			"7"
+#define PK_INT_OFFLINEMAXHOUR 		"8"
+#define PK_INT_PULSEINHML 			"9"
+#define PK_BIN_CITIZEN_CARDNO		"10"
+#define PK_INT_WATERLIMIT 	 		"11"
+#define PK_INT_FEEAMOUNT 			"12"
+#define PK_INT_FEEUNIT 				"13"
+#define PK_INT_VAILDTIME			"14"
+#define PK_INT_AUTHSTATUS			"15"
+#define PK_INT_PAYSTATUS			"16"
+#define PK_INT_FEESTART				"17"
+
+#define SP_CMD_UPGRADE 0x20         	//ÔÚÏßÉý¼¶
+#define SP_CMD_TRANSDTL_ACCOUNT 0x22    //¼ÇÕËÁ÷Ë®
+#define SP_CMD_HEARTBEAT 0x24 			//ÐÄÌø
+#define SP_CMD_CARD_AUTHENTICATION 0x26	//¿¨ÔÚÏßÈÏÖ¤
+#define SP_CMD_LOGIN	0x2C			//怬
+#define SP_CMD_FACTORY_LINK_TEST 0x2E	//¹¤³§Á´Â·²âÊÔ
+#define SP_CMD_SHORTURL	0x28			//»ñÈ¡¶þάÂë¶ÌµØÖ·
+#define SP_CMD_QRCODE_PAY_QUERY	0x2A	//¶þάÂëÏû·ÑÈ·ÈÏ
+
+#define IS_PUSH_FLOW(cmd) (0x1&(cmd))
+
+#pragma pack(push)
+#pragma pack(1)
+
+typedef struct
+{
+  uint16 datalen;
+  uint8 command;
+  uint8 excmd; // ÇëÇóÃüÁîÒªÇóżÊý
+  uint8 flag;
+  uint8 data[256];
+} sp_protocol_request_t;
+
+typedef struct
+{
+  uint16 datalen;
+  uint8 command;
+  uint8 excmd; // ÇëÇóÃüÁîÒªÇóżÊý
+  uint8 flag;
+  uint8 retcode;
+  uint8 data[256];
+} sp_protocol_response_t;
+
+#pragma pack(pop)
+
+typedef uint8(* protocol_cmd_func_t)(sp_protocol_response_t* resp, sp_pos_t* pos);
+
+typedef struct
+{
+  uint8 cmd;
+  protocol_cmd_func_t func;
+} protocol_cmd_t;
+
+void sp_communicate(sp_pos_t* pos);
+uint16 sp_card_authentication(sp_pos_t* pos, sp_card_t* card);
+uint16 sp_async_equipment_login(sp_pos_t* pos);
+uint16 sp_async_heartbeat(sp_pos_t* pos);
+uint16 sp_async_upload_transdtl(sp_pos_t* pos, sp_transdtl_t* dtl);
+uint16 sp_qrcode_init(sp_pos_t* pos, sp_card_t* card);
+uint16 sp_qrcode_query(sp_pos_t* pos, sp_card_t* card);
+
+//ͨѶ
+uint8 sp_comm_call(sp_pos_t* pos, sp_protocol_request_t* req,
+                   sp_protocol_response_t* resp, int32 timeout_ms);
+void sp_protocol_req_init(sp_protocol_request_t* req, uint8 command);
+#endif
+