1/* 2 * Copyright (c) 2021 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 STARTUP_TRIGER_CHECKER_H 17#define STARTUP_TRIGER_CHECKER_H 18#include <stdint.h> 19#include <sys/types.h> 20 21#ifdef __cplusplus 22#if __cplusplus 23extern "C" { 24#endif 25#endif 26 27#define MAX_TRIGGER_CMD_NAME_LEN 32 28#define MAX_TRIGGER_NAME_LEN 128 29#define MAX_TRIGGER_TYPE_LEN 16 30 31#define SUPPORT_DATA_BUFFER_MAX 128 32#define MAX_DATA_BUFFER_MAX (SUPPORT_DATA_BUFFER_MAX * 5) 33#define CONDITION_EXTEND_LEN 32 34 35#define LOGIC_DATA_FLAGS_ORIGINAL 0x1 36#define LOGIC_DATA_FLAGS_TRUE 0x08 37 38#define LOGIC_DATA_TEST_FLAG(data, flag) (((data)->flags & flag) == (flag)) 39#define LOGIC_DATA_SET_FLAG(data, flag) (data)->flags |= (flag) 40#define LOGIC_DATA_CLEAR_FLAG(data, flag) (data)->flags &= ~(flag) 41 42typedef struct { 43 uint32_t flags; 44 uint32_t startIndex; 45 uint32_t endIndex; 46} LogicData; 47 48struct tagTriggerNode_; 49typedef int (*PARAM_CHECK_DONE)(struct tagTriggerNode_ *trigger, const char *content, uint32_t size); 50typedef struct { 51 char triggerContent[MAX_TRIGGER_NAME_LEN]; 52 PARAM_CHECK_DONE triggerCheckDone; 53 int dataNumber; 54 int endIndex; 55 int dataUnit; 56 char *conditionName; 57 char *conditionContent; 58 char *inputName; 59 char *inputContent; 60 char *readContent; 61 char *data; 62} LogicCalculator; 63 64int CalculatorInit(LogicCalculator *calculator, int dataNumber, int dataUnit, int needCondition); 65void CalculatorFree(LogicCalculator *calculator); 66int ConvertInfixToPrefix(const char *condition, char *prefix, uint32_t prefixLen); 67int ComputeCondition(LogicCalculator *calculator, const char *condition); 68int GetValueFromContent(const char *content, uint32_t contentSize, uint32_t start, char *value, uint32_t valueSize); 69int CheckMatchSubCondition(const char *condition, const char *input, int length); 70 71#ifdef __cplusplus 72#if __cplusplus 73} 74#endif 75#endif 76#endif // STARTUP_TRIGER_CHECKER_H