1 /* 2 * Copyright (c) 2024 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef GRD_TYPE_EXPORT_H 17 #define GRD_TYPE_EXPORT_H 18 19 #include "stdint.h" 20 21 #ifdef __cplusplus 22 extern "C" { 23 #endif 24 25 #ifdef _WIN32 26 #ifdef GRD_DLL_EXPORT 27 #define GRD_API __declspec(dllexport) 28 #else 29 #define GRD_API 30 #endif 31 #else 32 #define GRD_API __attribute__((visibility("default"))) 33 #endif 34 35 #define GRD_SYMBOL GRD_API 36 37 typedef struct GRD_DB GRD_DB; 38 39 /** 40 * @brief Open database config. 41 */ 42 #define GRD_DB_OPEN_ONLY 0x00 // open database if exists, return error if database not exists 43 #define GRD_DB_OPEN_CREATE 0x01 // open database if exists, create database and open if database not exists 44 #define GRD_DB_OPEN_CHECK_FOR_ABNORMAL \ 45 0x02 // check data in database if close abnormally last time, 46 // if data is corrupted, rebuild the database 47 #define GRD_DB_OPEN_CHECK 0x04 // check data in database when open database, if data is corrupted, rebuild the database 48 #define GRD_DB_OPEN_SHARED_READ_ONLY 0x08 // open database in as read-only mode when sharedModeEnable = 1 49 50 /** 51 * @brief close database config. 52 */ 53 #define GRD_DB_CLOSE 0x00 54 #define GRD_DB_CLOSE_IGNORE_ERROR 0x01 55 56 /** 57 * @brief flush database config. 58 */ 59 #define GRD_DB_FLUSH_ASYNC 0x00 60 #define GRD_DB_FLUSH_SYNC 0x01 61 62 #define GRD_DOC_ID_DISPLAY 0x01 63 64 /** 65 * @brief meaning attr is an asset. 66 */ 67 #define GRD_DOC_ASSET_FLAG 0x01 68 69 typedef struct Query { 70 const char *filter; 71 const char *projection; 72 } Query; 73 74 typedef struct GRD_KVItem { 75 void *data; 76 uint32_t dataLen; 77 } GRD_KVItemT; 78 79 typedef struct GRD_ElementId { 80 const char *equipId; 81 uint64_t incrClock; 82 } GRD_ElementIdT; 83 84 typedef struct GRD_XmlOpPosition { 85 const char *tableName; 86 GRD_ElementIdT *elementId; 87 } GRD_XmlOpPositionT; 88 89 typedef struct GRD_UndoParam { 90 uint64_t captureTimeout; 91 } GRD_UndoParamT; 92 93 typedef enum GRD_EncodingCalMode { 94 UTF16 = 0, 95 UTF8, 96 ENCODE_BUTT, 97 } GRD_EncodingCalModeE; 98 99 typedef enum GRD_DocNodeType { 100 GRD_TEXT_TYPE = 0, 101 GRD_ARRAY_TYPE, 102 GRD_MAP_TYPE, 103 GRD_XML_TEXT_TYPE, 104 GRD_XML_ELEMENT_TYPE, 105 GRD_XML_FRAGMENT_TYPE, 106 } GRD_DocNodeTypeE; 107 108 typedef struct GRD_DocNodeInfo { 109 GRD_DocNodeTypeE type; 110 const char *content; 111 } GRD_DocNodeInfoT; 112 113 typedef enum GRD_SyncMode { 114 GRD_SYNC_MODE_UPLOAD = 0, 115 GRD_SYNC_MODE_DOWNLOAD, 116 GRD_SYNC_MODE_UP_DOWN, 117 GRD_SYNC_MODE_DOWNLOAD_LOG, 118 GRD_SYNC_MODE_UP_DOWN_LOG, 119 GRD_SYNC_MODE_INVALID, 120 } GRD_SyncModeE; 121 122 typedef enum GRD_SyncProcessStatus { 123 GRD_SYNC_PROCESS_PREPARED = 0, 124 GRD_SYNC_PROCESS_PROCESSING, 125 GRD_SYNC_PROCESS_FINISHED, 126 } GRD_SyncProcessStatusE; 127 128 typedef struct GRD_SyncProcess { 129 GRD_SyncProcessStatusE status; 130 int32_t errCode; 131 GRD_SyncModeE mode; 132 void *cloudDB; 133 uint64_t syncId; 134 } GRD_SyncProcessT; 135 136 typedef void (*GRD_SyncTaskCallbackFuncT)(GRD_SyncProcessT *syncProcess); 137 138 typedef struct GRD_SyncConfig { 139 GRD_SyncModeE mode; 140 char **equipIds; 141 uint8_t size; // equipId size 142 GRD_SyncTaskCallbackFuncT callbackFunc; 143 uint64_t timeout; 144 uint64_t syncId; 145 } GRD_SyncConfigT; 146 147 typedef void (*GRD_ScheduleFunc)(void *func, void *param); 148 149 typedef struct GRD_ThreadPool { 150 GRD_ScheduleFunc schedule; 151 } GRD_ThreadPoolT; 152 153 typedef const char *(*GrdEquipIdGetFuncT)(void); 154 155 typedef enum GRD_QueryConditionType { 156 GRD_QUERY_CONDITION_TYPE_NOT_USE = 0, 157 GRD_QUERY_CONDITION_TYPE_EQUAL_TO, 158 GRD_QUERY_CONDITION_TYPE_NOT_EQUAL_TO, 159 GRD_QUERY_CONDITION_TYPE_GREATER_THAN, 160 GRD_QUERY_CONDITION_TYPE_LESS_THAN, 161 GRD_QUERY_CONDITION_TYPE_GREATER_THAN_OR_EQUAL_TO, 162 GRD_QUERY_CONDITION_TYPE_LESS_THAN_OR_EQUAL_TO, 163 } GRD_QueryConditionTypeE; 164 165 typedef enum GRD_CloudFieldType { 166 GRD_CLOUD_FIELD_TYPE_INT = 0, 167 GRD_CLOUD_FIELD_TYPE_DOUBLE, 168 GRD_CLOUD_FIELD_TYPE_STRING, 169 GRD_CLOUD_FIELD_TYPE_BOOL, 170 GRD_CLOUD_FIELD_TYPE_BYTES, 171 } GRD_CloudFieldTypeE; 172 173 typedef enum CloudErrorCode { 174 E_CLOUD_OK = 0, 175 E_CLOUD_ERROR, 176 E_QUERY_END, 177 } CloudErrorCodeE; 178 179 typedef struct GRD_CloudField { 180 GRD_CloudFieldTypeE type; // field type 181 char *key; // field name 182 uint32_t valueLen; // value length 183 void *value; // value 184 GRD_QueryConditionTypeE condition; // query condition 185 } GRD_CloudFieldT; 186 187 typedef struct GRD_CloudRecord { 188 GRD_CloudFieldT *fields; // fields list 189 uint8_t fieldSize; 190 } GRD_CloudRecordT; 191 192 typedef struct GRD_CloudParams { 193 const char *tableName; 194 GRD_CloudRecordT *records; 195 uint32_t recordSize; 196 GRD_CloudRecordT **extends; 197 uint32_t *extendSize; 198 } GRD_CloudParamsT; 199 200 typedef struct AssetLoader { 201 int32_t (*downloadAsset)(void *cloudDB, const char *equipId, char *path); 202 int32_t (*uploadAsset)(void *cloudDB, char *path); 203 int32_t (*deleteAsset)(void *cloudDB, char *path); 204 int32_t (*deleteLocalAsset)(void *cloudDB, char *path); 205 } AssetLoaderT; 206 207 typedef struct GRD_ICloudDB { 208 void *cloudDB; 209 AssetLoaderT *assetLoader; 210 int32_t (*batchInsert)(void *cloudDB, GRD_CloudParamsT *cloudParams); 211 int32_t (*query)(void *cloudDB, GRD_CloudParamsT *cloudParams); 212 int32_t (*sendAwarenessData)(void *cloudDB, const uint8_t *data, uint32_t dataSize); 213 int32_t (*lock)(void *cloudDB, uint32_t *lockTimeMs); 214 int32_t (*unLock)(void *cloudDB); 215 int32_t (*heartBeat)(void *cloudDB); 216 int32_t (*close)(void *cloudDB); 217 } GRD_ICloudDBT; 218 #ifdef __cplusplus 219 } 220 #endif /* __cplusplus */ 221 222 #endif // GRD_TYPE_EXPORT_H 223