大理水控初始版本
diff --git a/supwisdom/sp_msgpack.c b/supwisdom/sp_msgpack.c
new file mode 100644
index 0000000..d1258a9
--- /dev/null
+++ b/supwisdom/sp_msgpack.c
@@ -0,0 +1,87 @@
+#include "string.h"
+#include "sp_msgpack.h"
+
+int32 sp_pack_init(cw_pack_context* pack,uint8* buf,uint16 len)
+{
+  memset(buf,0,len);
+  return cw_pack_context_init(pack,buf,len,0);
+}
+
+uint16 sp_pack_length(cw_pack_context* pack)
+{
+  if(pack->current != NULL && pack->start != NULL)
+  {
+    return (pack->current -pack->start);
+  }
+  return 256;
+}
+void sp_pack_put_str(cw_pack_context* pack,const char* parakey,const char* paraval)
+{
+  cw_pack_str(pack,parakey,strlen(parakey));
+  cw_pack_str(pack,paraval,strlen(paraval));
+}
+void sp_pack_put_int(cw_pack_context* pack,const char* parakey,const int paraval)
+{
+  cw_pack_str(pack,parakey,strlen(parakey));
+  cw_pack_signed(pack,paraval);
+}
+void sp_pack_put_bin(cw_pack_context* pack,const char* parakey,const uint8* paraval,
+                     const uint16 len)
+{
+  cw_pack_str(pack,parakey,strlen(parakey));
+  cw_pack_bin(pack,paraval,len);
+}
+int32 sp_unpack_init(cw_unpack_context* unpack,uint8* buf,uint16 len)
+{
+  cw_unpack_context_init(unpack,buf,len,0);
+  return unpack->return_code;
+}
+
+uint8 sp_unpack_map_size(cw_unpack_context* unpack)
+{
+  cw_unpack_next(unpack);
+  if(unpack->item.type == CWP_ITEM_MAP)
+  {
+    return (uint8)unpack->item.as.map.size;
+  }
+  return 0;
+}
+
+uint8 sp_unpack_value(cw_unpack_context* unpack,unpack_field_t* field)
+{
+  cw_unpack_next(unpack);
+  if(unpack->item.type == CWP_ITEM_STR)
+  {
+    field->key = unpack->item.as.str.start;
+    cw_unpack_next(unpack);
+    if(unpack->item.type == CWP_ITEM_STR)
+    {
+      field->val.strval = unpack->item.as.str.start;
+      field->strlen = unpack->item.as.str.length;
+      return 0;
+    }
+    else if(unpack->item.type == CWP_ITEM_POSITIVE_INTEGER)
+    {
+      field->val.intval= (int32)unpack->item.as.i64;
+      field->strlen = 0;
+      return 0;
+    }
+    else if(unpack->item.type == CWP_ITEM_BIN)
+    {
+      field->val.binval = unpack->item.as.str.start;
+      field->strlen = unpack->item.as.str.length;
+      return 0;
+    }
+    else
+    {
+      field->strlen = 0;
+      field->val.intval = 0;
+      return 1;
+    }
+  }
+  return 1;
+}
+
+
+
+