aboutsummaryrefslogtreecommitdiffstats
path: root/src/framework/include/nsfw_snapshot.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/framework/include/nsfw_snapshot.h')
-rw-r--r--src/framework/include/nsfw_snapshot.h144
1 files changed, 144 insertions, 0 deletions
diff --git a/src/framework/include/nsfw_snapshot.h b/src/framework/include/nsfw_snapshot.h
new file mode 100644
index 0000000..8958c64
--- /dev/null
+++ b/src/framework/include/nsfw_snapshot.h
@@ -0,0 +1,144 @@
+/*
+*
+* Copyright (c) 2018 Huawei Technologies Co.,Ltd.
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at:
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+#ifndef _FW_SNAPSHOT_H
+#define _FW_SNAPSHOT_H
+
+#include <stdlib.h>
+#include "types.h"
+#include "../snapshot/fw_ss_tlv.h"
+
+#ifdef __cplusplus
+/* *INDENT-OFF* */
+extern "C"{
+/* *INDENT-ON* */
+#endif /* __cplusplus */
+
+// object type(7 bits) | member type (7 bits) | is object(1 bit) | is array(1 bit)
+// member type is the type in object structure , it only effects the own object
+/**
+ * type - object , type object of array, type base item
+ */
+
+#define NSFW_SS_TYPE_OBJ(_objType) (0xfe00 & ((_objType) << 9))
+#define NSFW_SS_TYPE_GETOBJ(_objType) ((0xfe00 & (_objType)) >> 9)
+
+#define NSFW_SS_TYPE_MEMBER(_memType) (0x01fc & ((_memType) << 2))
+#define NSFW_SS_TYPE_GET_MEMBER(_memType) ((0x01fc & (_memType)) >> 2)
+
+#define NSFW_SS_TYPE_SET_MEMBER_ITEM(_memType) (NSFW_SS_TYPE_MEMBER((_memType)))
+#define NSFW_SS_TYPE_SET_MEMBER_OBJ(_objType, _memType) \
+ (NSFW_SS_TYPE_OBJ((_objType)) | NSFW_SS_TYPE_SET_MEMBER_ITEM((_memType)) | 0x02)
+#define NSFW_SS_TYPE_SET_MEMBER_OBJ_ARRAY(_objType, _memType) \
+ (NSFW_SS_TYPE_SET_MEMBER_OBJ((_objType), (_memType)) | 0x01)
+
+#define NSFW_SS_TYPE_IS_MEMBER_OBJ(_memType) ((_memType) & 0x02)
+#define NSFW_SS_TYPE_IS_MEMBER_ARRAY(_memType) ((_memType) & 0x01)
+
+/*
+ * This structure tells how to describe one object and its members
+ */
+typedef struct _nsfw_ss_objMemDesc
+{
+ u16 type; // object type(7 bits) | member type (7 bits) | is object(1 bit) | is array(1 bit)
+ u32 length;
+ u8 offset;
+} nsfw_ss_objMemDesc_t;
+
+typedef struct _nsfw_ss_objDesc
+{
+ u16 objType; /* Type number of object */
+ u8 memNum; /* Nubmer of object members */
+ u32 objSize;
+ nsfw_ss_objMemDesc_t *memDesc; /* Member descripe */
+} nsfw_ss_objDesc_t;
+
+#define NSFW_SS_MAX_OBJDESC_NUM 256
+
+/* Traversal, you can save the current value to start the search, do not need to start from the beginning of the search, because the value is generally a sequential */
+
+typedef struct _nsfw_ss_objDescManager
+{
+ nsfw_ss_objDesc_t *g_nsfw_ss_objDescs[NSFW_SS_MAX_OBJDESC_NUM];
+ int g_nsfw_ss_objDesNum;
+} nsfw_ss_objDescManager_t;
+
+extern nsfw_ss_objDescManager_t g_nsfw_ss_objDescManager;
+
+#define nsfw_ss_getObjDescManagerInst() (&g_nsfw_ss_objDescManager)
+
+/**
+ * @Function nsfw_ss_registe_ObjDesc
+ * @Description Registe object description to snapshot
+ * @param objDesc - description of object
+ * @return void
+ */
+extern void nsfw_ss_register_ObjDesc (nsfw_ss_objDesc_t * objDesc);
+
+/**
+ * @Function nsfw_ss_store
+ * @Description store object to memory
+ * @param (in) objType - type of object
+ * @param (in) obj - adderss of object memory
+ * @param (in) storeMem - address of memory to store object data
+ * @param (in) storeMemLen - maximal length of storage memory
+ * @return positive integer means length of memory cost on success. return -1 if error
+ */
+extern int nsfw_ss_store (u16 objType, void *obj, void *storeMem,
+ u32 storeMemLen);
+
+/**
+ * @Function nsfw_ss_restore
+ * @Description restore object from memory
+ * @param (in) objMem - memory of object
+ * @param (in) mem - memory of storage
+ * @param (in) storeMemLen - maximal length of storage memory
+ * @return positive integer stands on object type, -1 on error
+ */
+extern int nsfw_ss_restore (void *objMem, void *mem, u32 storeMemLen);
+
+/**
+ * @Function nsfw_ss_getObjStoreMemLen
+ * @Description Get the maximal memory it needs
+ * @param (in) objType - type of object
+ * @return length of memory needs, -1 if error
+ */
+extern int nsfw_ss_getObjStoreMemLen (int objType);
+
+#define _NSFW_SNAPSHOT_OBJDESC_REGISTER_SURFIX(_value, _surfix) \
+ static __attribute__((__constructor__(121))) void nsfw_snapshot_objdesc_register_constructor##_surfix(void){\
+ nsfw_ss_register_ObjDesc((_value));\
+ }
+
+#define NSFW_SNAPSHOT_OBJDESC_REGISTER_SURFIX(_value, _surfix) \
+ _NSFW_SNAPSHOT_OBJDESC_REGISTER_SURFIX(_value, _surfix)
+
+#define NSFW_SNAPSHOT_OBJDESC_REGISTER_UNIQUE(_value) \
+ NSFW_SNAPSHOT_OBJDESC_REGISTER_SURFIX(_value, __LINE__)
+
+/**
+ * Using this marcro to register object description
+ */
+#define NSFW_SS_REGSITER_OBJDESC(_value) \
+ NSFW_SNAPSHOT_OBJDESC_REGISTER_UNIQUE(_value)
+
+#ifdef __cplusplus
+/* *INDENT-OFF* */
+}
+/* *INDENT-ON* */
+#endif /* __cplusplus */
+
+#endif /* _FW_SNAPSHOT_H */