Add ipc config module.
This commit is contained in:
parent
01e9deaa77
commit
523a6b8b99
|
@ -41,3 +41,6 @@ set(CURL_OPENSSL_LIB_SHARED_ENABLE "false")
|
||||||
set(CLANG_TIDY_SUPPORT "true")
|
set(CLANG_TIDY_SUPPORT "true")
|
||||||
set(LLVM_PATH "/home/xiaojiazhu/project/tmp/llvm-project")
|
set(LLVM_PATH "/home/xiaojiazhu/project/tmp/llvm-project")
|
||||||
# ------------ build clang-tidy ------------ end
|
# ------------ build clang-tidy ------------ end
|
||||||
|
# ------------ build IpcConfig ------------ start
|
||||||
|
set(IPC_CONFIG_FILE_PATH "./ipc_config")
|
||||||
|
# ------------ build IpcConfig ------------ end
|
4
external/libconfig/build_libconfig.sh
vendored
4
external/libconfig/build_libconfig.sh
vendored
|
@ -4,11 +4,9 @@ platform=$1
|
||||||
CROSS_COMPILER_PATH=$2
|
CROSS_COMPILER_PATH=$2
|
||||||
CROSS_COMPILER=$3
|
CROSS_COMPILER=$3
|
||||||
echo "Compile libconfig, platform = $platform."
|
echo "Compile libconfig, platform = $platform."
|
||||||
# echo "CROSS_COMPILER_PATH = $CROSS_COMPILER_PATH"
|
|
||||||
echo "CROSS_COMPILER = $CROSS_COMPILER"
|
echo "CROSS_COMPILER = $CROSS_COMPILER"
|
||||||
echo "Start to compile libconfig."
|
echo "Start to compile libconfig."
|
||||||
export ROOT_PATH=$PWD
|
export ROOT_PATH=$PWD
|
||||||
# export PATH=$CROSS_COMPILER_PATH:$PATH
|
|
||||||
if [ ! -d "./libconfig-1.7.3" ];then
|
if [ ! -d "./libconfig-1.7.3" ];then
|
||||||
echo "tar zxvf libconfig-1.7.3.tar.gz"
|
echo "tar zxvf libconfig-1.7.3.tar.gz"
|
||||||
tar zxvf libconfig-1.7.3.tar.gz
|
tar zxvf libconfig-1.7.3.tar.gz
|
||||||
|
@ -16,8 +14,6 @@ fi
|
||||||
if [ ! -f "./libconfig-1.7.3/lib/.libs/libconfig++.a" ] || [ ! -f "./libconfig-1.7.3/lib/.libs/libconfig.a" ];then
|
if [ ! -f "./libconfig-1.7.3/lib/.libs/libconfig++.a" ] || [ ! -f "./libconfig-1.7.3/lib/.libs/libconfig.a" ];then
|
||||||
echo "make libconfig++.a"
|
echo "make libconfig++.a"
|
||||||
cd ./libconfig-1.7.3
|
cd ./libconfig-1.7.3
|
||||||
# ./configure
|
|
||||||
# make
|
|
||||||
case $platform in
|
case $platform in
|
||||||
"linux")
|
"linux")
|
||||||
echo "==Compile linux."
|
echo "==Compile linux."
|
||||||
|
|
|
@ -16,8 +16,8 @@ static StatusCode IHalUnInit(IHal *object)
|
||||||
}
|
}
|
||||||
static IHal default_hal = {
|
static IHal default_hal = {
|
||||||
.init = IHalInit,
|
.init = IHalInit,
|
||||||
.free = IHalFree,
|
|
||||||
.un_init = IHalUnInit,
|
.un_init = IHalUnInit,
|
||||||
|
.free = IHalFree,
|
||||||
};
|
};
|
||||||
static IHal *hal_instance = &default_hal;
|
static IHal *hal_instance = &default_hal;
|
||||||
IHal *GetHalIntance(void)
|
IHal *GetHalIntance(void)
|
||||||
|
|
|
@ -9,8 +9,8 @@ extern "C"
|
||||||
typedef struct i_hal
|
typedef struct i_hal
|
||||||
{
|
{
|
||||||
StatusCode (*init)(IHal *);
|
StatusCode (*init)(IHal *);
|
||||||
void (*free)(IHal *);
|
|
||||||
StatusCode (*un_init)(IHal *);
|
StatusCode (*un_init)(IHal *);
|
||||||
|
void (*free)(IHal *);
|
||||||
} IHal;
|
} IHal;
|
||||||
IHal *GetHalIntance(void);
|
IHal *GetHalIntance(void);
|
||||||
StatusCode NewIHal(IHal **object);
|
StatusCode NewIHal(IHal **object);
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
|
|
||||||
add_subdirectory(StateMachine)
|
add_subdirectory(StateMachine)
|
||||||
|
add_subdirectory(IpcConfig)
|
50
middleware/IpcConfig/CMakeLists.txt
Normal file
50
middleware/IpcConfig/CMakeLists.txt
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
|
||||||
|
include(${CMAKE_SOURCE_DIR}/build/global_config.cmake)
|
||||||
|
set(EXECUTABLE_OUTPUT_PATH ${EXEC_OUTPUT_PATH})
|
||||||
|
set(LIBRARY_OUTPUT_PATH ${LIBS_OUTPUT_PATH})
|
||||||
|
|
||||||
|
include_directories(
|
||||||
|
./src
|
||||||
|
./include
|
||||||
|
${UTILS_SOURCE_PATH}/StatusCode/include
|
||||||
|
${UTILS_SOURCE_PATH}/Log/include
|
||||||
|
${UTILS_SOURCE_PATH}/Config/include
|
||||||
|
)
|
||||||
|
#do not rely on any other library
|
||||||
|
#link_directories(
|
||||||
|
#)
|
||||||
|
|
||||||
|
set(CMAKE_AUTOMOC ON)
|
||||||
|
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
||||||
|
if (DEFINED IPC_CONFIG_FILE_PATH)
|
||||||
|
add_definitions(-DIPC_CONFIG_FILE_PATH=\"${IPC_CONFIG_FILE_PATH}\")
|
||||||
|
else()
|
||||||
|
message(FATAL_ERROR "You set define IPC_CONFIG_FILE_PATH in toolchan .cmake file to tell code where to save config file.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
aux_source_directory(./src SRC_FILES)
|
||||||
|
|
||||||
|
set(TARGET_NAME IpcConfig)
|
||||||
|
add_library(${TARGET_NAME} STATIC ${SRC_FILES})
|
||||||
|
|
||||||
|
target_link_libraries(${TARGET_NAME} ReturnCode Log)
|
||||||
|
|
||||||
|
if ("${CLANG_TIDY_SUPPORT}" MATCHES "true")
|
||||||
|
add_custom_target(
|
||||||
|
IpcConfig_code_check
|
||||||
|
COMMAND ${CLANG_TIDY_EXE}
|
||||||
|
-checks='${CLANG_TIDY_CHECKS}'
|
||||||
|
--header-filter=.*
|
||||||
|
--system-headers=false
|
||||||
|
${SRC_FILES}
|
||||||
|
${CLANG_TIDY_CONFIG}
|
||||||
|
-p ${CMAKE_SOURCE_DIR_IPCSDK}/cmake-shell
|
||||||
|
WORKING_DIRECTORY ${MIDDLEWARE_SOURCE_PATH}/IpcConfig
|
||||||
|
)
|
||||||
|
add_custom_command(
|
||||||
|
TARGET ${TARGET_NAME}
|
||||||
|
PRE_BUILD
|
||||||
|
COMMAND make IpcConfig_code_check
|
||||||
|
WORKING_DIRECTORY ${PROJECT_ROOT_PATH}/cmake-shell/
|
||||||
|
)
|
||||||
|
endif()
|
21
middleware/IpcConfig/include/IIpcConfig.h
Normal file
21
middleware/IpcConfig/include/IIpcConfig.h
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
#ifndef IIPCCONFIG_H
|
||||||
|
#define IIPCCONFIG_H
|
||||||
|
#include "StatusCode.h"
|
||||||
|
#include <memory>
|
||||||
|
enum class IpcConfigKey
|
||||||
|
{
|
||||||
|
TEST_NUM = 0,
|
||||||
|
END
|
||||||
|
};
|
||||||
|
class IIpcConfig
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
IIpcConfig() = default;
|
||||||
|
virtual ~IIpcConfig() = default;
|
||||||
|
static std::shared_ptr<IIpcConfig> &GetInstance(std::shared_ptr<IIpcConfig> *impl = nullptr);
|
||||||
|
virtual const StatusCode Init(void) { return CreateStatusCode(STATUS_CODE_OK); }
|
||||||
|
virtual const StatusCode UnInit(void) { return CreateStatusCode(STATUS_CODE_OK); }
|
||||||
|
virtual const int GetInt(const IpcConfigKey &key) { return -1; }
|
||||||
|
};
|
||||||
|
bool CreateIpcConfig(void);
|
||||||
|
#endif
|
20
middleware/IpcConfig/include/IpcConfig.h
Normal file
20
middleware/IpcConfig/include/IpcConfig.h
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
#ifndef IPCCONFIG_H
|
||||||
|
#define IPCCONFIG_H
|
||||||
|
#include "StatusCode.h"
|
||||||
|
#include <memory>
|
||||||
|
enum class IpcConfigKey
|
||||||
|
{
|
||||||
|
TEST_NUM = 0,
|
||||||
|
END
|
||||||
|
};
|
||||||
|
class IpcConfig
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
IpcConfig() = default;
|
||||||
|
virtual ~IpcConfig() = default;
|
||||||
|
static std::shared_ptr<IpcConfig> &GetInstance(std::shared_ptr<IpcConfig> *impl = nullptr);
|
||||||
|
const StatusCode Init(void);
|
||||||
|
const StatusCode UnInit(void);
|
||||||
|
const int GetInt(const IpcConfigKey &key);
|
||||||
|
};
|
||||||
|
#endif
|
19
middleware/IpcConfig/src/IIpcConfig.cpp
Normal file
19
middleware/IpcConfig/src/IIpcConfig.cpp
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
#include "IIpcConfig.h"
|
||||||
|
#include "ILog.h"
|
||||||
|
std::shared_ptr<IIpcConfig> &IIpcConfig::GetInstance(std::shared_ptr<IIpcConfig> *impl)
|
||||||
|
{
|
||||||
|
static auto instance = std::make_shared<IIpcConfig>();
|
||||||
|
if (impl)
|
||||||
|
{
|
||||||
|
if (instance.use_count() == 1)
|
||||||
|
{
|
||||||
|
LogInfo("Instance changed succeed.\n");
|
||||||
|
instance = *impl;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LogError("Can't changing the instance becase of using by some one.\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return instance;
|
||||||
|
}
|
28
middleware/IpcConfig/src/IpcConfig.cpp
Normal file
28
middleware/IpcConfig/src/IpcConfig.cpp
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
#include "IpcConfig.h"
|
||||||
|
#include "ILog.h"
|
||||||
|
#include <string.h>
|
||||||
|
const StatusCode IpcConfig::Init(void)
|
||||||
|
{
|
||||||
|
memset(&mAllData, 0, sizeof(Config_s));
|
||||||
|
mCfg = OpenConfigFile(IPC_CONFIG_FILE_PATH);
|
||||||
|
ReadAllConfigParameters();
|
||||||
|
return CreateStatusCode(STATUS_CODE_OK);
|
||||||
|
}
|
||||||
|
const StatusCode IpcConfig::UnInit(void)
|
||||||
|
{
|
||||||
|
return CreateStatusCode(STATUS_CODE_OK);
|
||||||
|
}
|
||||||
|
const int IpcConfig::GetInt(const IpcConfigKey &key)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
void IpcConfig::ReadAllConfigParameters(void)
|
||||||
|
{
|
||||||
|
StatusCode code = ConfigGetInt(mCfg, "test_num", &(mAllData.testNum));
|
||||||
|
if (StatusCodeEqual(code, "CONFIG_CODE_PARAM_NOT_EXIST"))
|
||||||
|
{
|
||||||
|
constexpr int DEFAULT_TEST_NUM = 0;
|
||||||
|
mAllData.testNum = DEFAULT_TEST_NUM;
|
||||||
|
ConfigSetInt(mCfg, "test_num", mAllData.testNum);
|
||||||
|
}
|
||||||
|
}
|
27
middleware/IpcConfig/src/IpcConfig.h
Normal file
27
middleware/IpcConfig/src/IpcConfig.h
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
#ifndef IPCCONFIG_H
|
||||||
|
#define IPCCONFIG_H
|
||||||
|
#include "StatusCode.h"
|
||||||
|
#include "IIpcConfig.h"
|
||||||
|
#include "Config.h"
|
||||||
|
#include <memory>
|
||||||
|
typedef struct Config_s
|
||||||
|
{
|
||||||
|
int testNum;
|
||||||
|
} Config_s;
|
||||||
|
class IpcConfig : public IIpcConfig
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
IpcConfig() = default;
|
||||||
|
virtual ~IpcConfig() = default;
|
||||||
|
const StatusCode Init(void) override;
|
||||||
|
const StatusCode UnInit(void) override;
|
||||||
|
const int GetInt(const IpcConfigKey &key) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
void ReadAllConfigParameters(void);
|
||||||
|
|
||||||
|
private:
|
||||||
|
VConfig *mCfg;
|
||||||
|
Config_s mAllData;
|
||||||
|
};
|
||||||
|
#endif
|
30
middleware/IpcConfig/src/IpcConfigMakePtr.cpp
Normal file
30
middleware/IpcConfig/src/IpcConfigMakePtr.cpp
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
#include "IpcConfigMakePtr.h"
|
||||||
|
#include "ILog.h"
|
||||||
|
#include "IpcConfig.h"
|
||||||
|
bool CreateIpcConfig(void)
|
||||||
|
{
|
||||||
|
auto instance = std::make_shared<IIpcConfig>();
|
||||||
|
StatusCode code = IpcConfigMakePtr::GetInstance()->CreateIpcConfig(instance);
|
||||||
|
if (IsCodeOK(code))
|
||||||
|
{
|
||||||
|
LogInfo("CreateIpcConfig is ok.\n");
|
||||||
|
IIpcConfig::GetInstance(&instance);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
std::shared_ptr<IpcConfigMakePtr> &IpcConfigMakePtr::GetInstance(std::shared_ptr<IpcConfigMakePtr> *impl)
|
||||||
|
{
|
||||||
|
static auto instance = std::make_shared<IpcConfigMakePtr>();
|
||||||
|
if (impl)
|
||||||
|
{
|
||||||
|
instance = *impl;
|
||||||
|
}
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
const StatusCode IpcConfigMakePtr::CreateIpcConfig(std::shared_ptr<IIpcConfig> &impl)
|
||||||
|
{
|
||||||
|
auto tmp = std::make_shared<IpcConfig>();
|
||||||
|
impl = tmp;
|
||||||
|
return CreateStatusCode(STATUS_CODE_OK);
|
||||||
|
}
|
14
middleware/IpcConfig/src/IpcConfigMakePtr.h
Normal file
14
middleware/IpcConfig/src/IpcConfigMakePtr.h
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
#ifndef IPC_CONFIG_MAKE_PTR_H
|
||||||
|
#define IPC_CONFIG_MAKE_PTR_H
|
||||||
|
#include "IIpcConfig.h"
|
||||||
|
#include "StatusCode.h"
|
||||||
|
#include <memory>
|
||||||
|
class IpcConfigMakePtr
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
IpcConfigMakePtr() = default;
|
||||||
|
virtual ~IpcConfigMakePtr() = default;
|
||||||
|
static std::shared_ptr<IpcConfigMakePtr> &GetInstance(std::shared_ptr<IpcConfigMakePtr> *impl = nullptr);
|
||||||
|
virtual const StatusCode CreateIpcConfig(std::shared_ptr<IIpcConfig> &impl);
|
||||||
|
};
|
||||||
|
#endif // !IPC_CONFIG_MAKE_PTR_H
|
14
middleware/IpcConfig/src/IpcConifgMakePtr.h
Normal file
14
middleware/IpcConfig/src/IpcConifgMakePtr.h
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
#ifndef IPC_CONFIG_MAKE_PTR_H
|
||||||
|
#define IPC_CONFIG_MAKE_PTR_H
|
||||||
|
#include "IIpcConfig.h"
|
||||||
|
#include "StatusCode.h"
|
||||||
|
#include <memory>
|
||||||
|
class IpcConfigMakePtr
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
IpcConfigMakePtr() = default;
|
||||||
|
virtual ~IpcConfigMakePtr() = default;
|
||||||
|
static std::shared_ptr<IpcConfigMakePtr> &GetInstance(std::shared_ptr<IpcConfigMakePtr> *impl = nullptr);
|
||||||
|
virtual const StatusCode CreateIpcConfig(std::shared_ptr<IIpcConfig> &impl);
|
||||||
|
};
|
||||||
|
#endif // !IPC_CONFIG_MAKE_PTR_H
|
|
@ -1,7 +1,5 @@
|
||||||
|
|
||||||
# cmake_minimum_required(VERSION 2.8.0)
|
|
||||||
#Compile gtest for test code.
|
#Compile gtest for test code.
|
||||||
# add_subdirectory(ReturnCode)
|
add_subdirectory(Config)
|
||||||
add_subdirectory(Log)
|
add_subdirectory(Log)
|
||||||
|
|
||||||
|
|
||||||
|
|
58
test/utils/Config/CMakeLists.txt
Normal file
58
test/utils/Config/CMakeLists.txt
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
# include(${CMAKE_SOURCE_DIR}/build/independent_source.cmake)
|
||||||
|
include(${CMAKE_SOURCE_DIR_IPCSDK}/build/global_config.cmake)
|
||||||
|
set(EXECUTABLE_OUTPUT_PATH ${TEST_OUTPUT_PATH}/bin)
|
||||||
|
|
||||||
|
include_directories(
|
||||||
|
.
|
||||||
|
./src
|
||||||
|
./include
|
||||||
|
${UTILS_SOURCE_PATH}/Log/include
|
||||||
|
${UTILS_SOURCE_PATH}/StatusCode/include
|
||||||
|
${UTILS_SOURCE_PATH}/Config/include
|
||||||
|
${EXTERNAL_SOURCE_PATH}/gtest/googletest-release-1.11.0/googletest/include
|
||||||
|
${EXTERNAL_SOURCE_PATH}/gtest/googletest-release-1.11.0/googlemock/include
|
||||||
|
)
|
||||||
|
|
||||||
|
link_directories(
|
||||||
|
${EXTERNAL_SOURCE_PATH}/gtest/googletest-release-1.11.0/googlemock/lib
|
||||||
|
${EXTERNAL_SOURCE_PATH}/gtest/googletest-release-1.11.0/googlemock/lib
|
||||||
|
${LIBS_OUTPUT_PATH}
|
||||||
|
${EXTERNAL_SOURCE_PATH}/libconfig/libconfig-1.7.3/lib/.libs
|
||||||
|
)
|
||||||
|
|
||||||
|
set(CMAKE_AUTOMOC ON)
|
||||||
|
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
||||||
|
|
||||||
|
set(CMAKE_AUTOMOC ON)
|
||||||
|
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
||||||
|
|
||||||
|
aux_source_directory(. SRC_FILES)
|
||||||
|
aux_source_directory(./src SRC_FILES)
|
||||||
|
|
||||||
|
set(TARGET_NAME ConfigTest)
|
||||||
|
add_executable(${TARGET_NAME} ${SRC_FILES})
|
||||||
|
target_link_libraries(${TARGET_NAME} Config gtest gmock pthread)
|
||||||
|
if(${COVERAGE_ON} MATCHES "true")
|
||||||
|
target_link_libraries(${TARGET_NAME} gcov)
|
||||||
|
endif()
|
||||||
|
if ("${CLANG_TIDY_SUPPORT}" MATCHES "true")
|
||||||
|
add_custom_target(
|
||||||
|
ConfigTest_code_check
|
||||||
|
COMMAND ${CLANG_TIDY_EXE}
|
||||||
|
-checks='${CLANG_TIDY_CHECKS}'
|
||||||
|
--header-filter=.*
|
||||||
|
--system-headers=false
|
||||||
|
${SRC_FILES}
|
||||||
|
${CLANG_TIDY_CONFIG}
|
||||||
|
# --line-filter='[{\"name\":\"${EXTERNAL_SOURCE_PATH}/gtest/googletest-release-1.11.0/googletest/include/getest/gtest.h\"}]'
|
||||||
|
--line-filter='[{\"name\":\"${EXTERNAL_SOURCE_PATH}/gtest/googletest-release-1.11.0/googletest/include/getest/*.h\"}]'
|
||||||
|
-p ${CMAKE_SOURCE_DIR_IPCSDK}/cmake-shell
|
||||||
|
WORKING_DIRECTORY ${TEST_SOURCE_PATH}/utils/Config
|
||||||
|
)
|
||||||
|
add_custom_command(
|
||||||
|
TARGET ${TARGET_NAME}
|
||||||
|
PRE_BUILD
|
||||||
|
COMMAND make ConfigTest_code_check
|
||||||
|
WORKING_DIRECTORY ${PROJECT_ROOT_PATH}/cmake-shell/
|
||||||
|
)
|
||||||
|
endif()
|
9
test/utils/Config/mainTest.cpp
Normal file
9
test/utils/Config/mainTest.cpp
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
#include <gmock/gmock.h>
|
||||||
|
#include <gtest/gtest.h>
|
||||||
|
#include <thread>
|
||||||
|
#include <unistd.h>
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
testing::InitGoogleTest(&argc, argv);
|
||||||
|
return RUN_ALL_TESTS();
|
||||||
|
}
|
18
test/utils/Config/src/Config_Test.cpp
Normal file
18
test/utils/Config/src/Config_Test.cpp
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
#include "ILog.h"
|
||||||
|
#include "Config.h"
|
||||||
|
// #include <gmock/gmock.h>
|
||||||
|
#include <gtest/gtest.h>
|
||||||
|
namespace ConfigTest
|
||||||
|
{
|
||||||
|
// ../output_files/test/bin/LogTest --gtest_filter=ConfigTest.Demo
|
||||||
|
TEST(ConfigTest, Demo)
|
||||||
|
{
|
||||||
|
CreateLogModule();
|
||||||
|
ILogInit(LOG_INSTANCE_TYPE_END);
|
||||||
|
VConfig *config = OpenConfigFile("./config");
|
||||||
|
int value = 0;
|
||||||
|
ConfigGetInt(config, "number", &value);
|
||||||
|
ILogUnInit();
|
||||||
|
DestroyLogModule();
|
||||||
|
}
|
||||||
|
} // namespace ConfigTest
|
|
@ -8,10 +8,11 @@ include_directories(
|
||||||
./include
|
./include
|
||||||
${UTILS_SOURCE_PATH}/StatusCode/include
|
${UTILS_SOURCE_PATH}/StatusCode/include
|
||||||
${UTILS_SOURCE_PATH}/Log/include
|
${UTILS_SOURCE_PATH}/Log/include
|
||||||
|
${EXTERNAL_SOURCE_PATH}/libconfig/libconfig-1.7.3/lib
|
||||||
)
|
)
|
||||||
#do not rely on any other library
|
# link_directories(
|
||||||
#link_directories(
|
# ${EXTERNAL_SOURCE_PATH}/libconfig/libconfig-1.7.3/lib/.libs
|
||||||
#)
|
# )
|
||||||
|
|
||||||
set(CMAKE_AUTOMOC ON)
|
set(CMAKE_AUTOMOC ON)
|
||||||
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
||||||
|
@ -20,7 +21,7 @@ aux_source_directory(./src SRC_FILES)
|
||||||
|
|
||||||
set(TARGET_NAME Config)
|
set(TARGET_NAME Config)
|
||||||
add_library(${TARGET_NAME} STATIC ${SRC_FILES})
|
add_library(${TARGET_NAME} STATIC ${SRC_FILES})
|
||||||
target_link_libraries(${TARGET_NAME} Log)
|
target_link_libraries(${TARGET_NAME} StatusCode Log config)
|
||||||
|
|
||||||
if ("${CLANG_TIDY_SUPPORT}" MATCHES "true")
|
if ("${CLANG_TIDY_SUPPORT}" MATCHES "true")
|
||||||
add_custom_target(
|
add_custom_target(
|
||||||
|
|
|
@ -5,8 +5,23 @@
|
||||||
extern "C"
|
extern "C"
|
||||||
{
|
{
|
||||||
#endif
|
#endif
|
||||||
const StatusCode ConfigInit(void);
|
enum CONFIG_CODE
|
||||||
const StatusCode ConfigUnInit(void);
|
{
|
||||||
|
CONFIG_CODE_PARAM_NOT_EXIST = STATUS_CODE_END,
|
||||||
|
CONFIG_CODE_END
|
||||||
|
};
|
||||||
|
typedef struct v_config VConfig;
|
||||||
|
typedef struct v_config
|
||||||
|
{
|
||||||
|
const StatusCode (*get_int)(VConfig *, const char *, int *);
|
||||||
|
const StatusCode (*set_int)(VConfig *, const char *, const int);
|
||||||
|
} VConfig;
|
||||||
|
const StatusCode ConfigInit(void);
|
||||||
|
const StatusCode ConfigUnInit(void);
|
||||||
|
VConfig *OpenConfigFile(const char *fileName);
|
||||||
|
void CloseConfigFile(VConfig *cfg);
|
||||||
|
const StatusCode ConfigGetInt(VConfig *cfg, const char *name, int *value);
|
||||||
|
const StatusCode ConfigSetInt(VConfig *cfg, const char *name, const int value);
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1,7 +1,35 @@
|
||||||
#include "Config.h"
|
#include "Config.h"
|
||||||
|
#include "ConfigImpl.h"
|
||||||
|
#include <stddef.h>
|
||||||
const StatusCode ConfigInit(void)
|
const StatusCode ConfigInit(void)
|
||||||
{
|
{
|
||||||
|
return CreateStatusCode(STATUS_CODE_OK);
|
||||||
}
|
}
|
||||||
const StatusCode ConfigUnInit(void)
|
const StatusCode ConfigUnInit(void)
|
||||||
{
|
{
|
||||||
|
return CreateStatusCode(STATUS_CODE_OK);
|
||||||
|
}
|
||||||
|
VConfig *OpenConfigFile(const char *fileName)
|
||||||
|
{
|
||||||
|
return (VConfig *)NewConfig(fileName);
|
||||||
|
}
|
||||||
|
void CloseConfigFile(VConfig *cfg)
|
||||||
|
{
|
||||||
|
((Config *)cfg)->close(cfg);
|
||||||
|
}
|
||||||
|
const StatusCode ConfigGetInt(VConfig *cfg, const char *name, int *value)
|
||||||
|
{
|
||||||
|
if (NULL == cfg)
|
||||||
|
{
|
||||||
|
return CreateStatusCode(STATUS_CODE_NOT_OK);
|
||||||
|
}
|
||||||
|
return cfg->get_int(cfg, name, value);
|
||||||
|
}
|
||||||
|
const StatusCode ConfigSetInt(VConfig *cfg, const char *name, const int value)
|
||||||
|
{
|
||||||
|
if (NULL == cfg)
|
||||||
|
{
|
||||||
|
return CreateStatusCode(STATUS_CODE_NOT_OK);
|
||||||
|
}
|
||||||
|
return cfg->set_int(cfg, name, value);
|
||||||
}
|
}
|
46
utils/Config/src/ConfigCode.c
Normal file
46
utils/Config/src/ConfigCode.c
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
#include "ConfigCode.h"
|
||||||
|
#include "ILog.h"
|
||||||
|
#include <string.h>
|
||||||
|
static const char *ConfigCodeString[CONFIG_CODE_END - STATUS_CODE_END + 1] = {
|
||||||
|
"CONFIG_CODE_PARAM_NOT_EXIST",
|
||||||
|
"CONFIG_CODE_END"};
|
||||||
|
static const char *PrintStringConfigCode(const StatusCode this)
|
||||||
|
{
|
||||||
|
const int CODE_INDEX = this.mStatusCode - STATUS_CODE_END;
|
||||||
|
if (STATUS_CODE_END <= this.mStatusCode && this.mStatusCode <= CONFIG_CODE_END)
|
||||||
|
{
|
||||||
|
LogInfo("Config code = [ %s ]\n", ConfigCodeString[CODE_INDEX]);
|
||||||
|
return ConfigCodeString[CODE_INDEX];
|
||||||
|
}
|
||||||
|
LogError("Config code undefine.\n");
|
||||||
|
return "Config code undefine.\n";
|
||||||
|
}
|
||||||
|
static const bool CodeEqual(const StatusCode code, const char *value)
|
||||||
|
{
|
||||||
|
if (memcmp(value, ConfigCodeString[code.mStatusCode - STATUS_CODE_END], strlen(value)) == 0)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
static StatusCode NewConfigCode(const long int code)
|
||||||
|
{
|
||||||
|
StatusCode result = {
|
||||||
|
PrintStringConfigCode,
|
||||||
|
CodeEqual,
|
||||||
|
code};
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
const StatusCode CreateConfigCode(const long int code)
|
||||||
|
{
|
||||||
|
if (STATUS_CODE_OK <= code && code < STATUS_CODE_END)
|
||||||
|
{
|
||||||
|
return CreateStatusCode(code);
|
||||||
|
}
|
||||||
|
if (STATUS_CODE_END <= code && code < CONFIG_CODE_END)
|
||||||
|
{
|
||||||
|
return NewConfigCode(code);
|
||||||
|
}
|
||||||
|
LogError("undefined code.\n");
|
||||||
|
return CreateStatusCode(STATUS_CODE_END);
|
||||||
|
}
|
12
utils/Config/src/ConfigCode.h
Normal file
12
utils/Config/src/ConfigCode.h
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
#ifndef CONFIGCODE_H
|
||||||
|
#define CONFIGCODE_H
|
||||||
|
#include "Config.h"
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
|
#endif
|
||||||
|
const StatusCode CreateConfigCode(const long int code);
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif
|
70
utils/Config/src/ConfigImpl.c
Normal file
70
utils/Config/src/ConfigImpl.c
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
#include "ConfigImpl.h"
|
||||||
|
#include "ILog.h"
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
static void ConfigClose(VConfig *cfg)
|
||||||
|
{
|
||||||
|
if (NULL != cfg)
|
||||||
|
{
|
||||||
|
config_destroy(&(((Config *)cfg)->cfg));
|
||||||
|
free(cfg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
static const StatusCode ConfigGetIntImpl(VConfig *cfg, const char *name, int *value)
|
||||||
|
{
|
||||||
|
int result = 0;
|
||||||
|
config_setting_t *root, *setting, *movie;
|
||||||
|
root = config_root_setting(&(((Config *)cfg)->cfg));
|
||||||
|
setting = config_setting_get_member(root, name);
|
||||||
|
return CreateStatusCode(STATUS_CODE_OK);
|
||||||
|
}
|
||||||
|
static const StatusCode ConfigSetIntImpl(VConfig *cfg, const char *name, const int value)
|
||||||
|
{
|
||||||
|
// int result = 0;
|
||||||
|
// config_setting_t *root, *setting, *movie;
|
||||||
|
// root = config_root_setting(&(((Config*)cfg)->cfg));
|
||||||
|
// setting = config_setting_get_member(root, name);
|
||||||
|
return CreateStatusCode(STATUS_CODE_OK);
|
||||||
|
}
|
||||||
|
static void ConfigImplInit(Config *cfg)
|
||||||
|
{
|
||||||
|
if (NULL == cfg)
|
||||||
|
{
|
||||||
|
LogError("NULL pointer.\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
cfg->close = ConfigClose;
|
||||||
|
cfg->base.get_int = ConfigGetIntImpl;
|
||||||
|
cfg->base.set_int = ConfigSetIntImpl;
|
||||||
|
}
|
||||||
|
Config *NewConfig(const char *fileName)
|
||||||
|
{
|
||||||
|
Config *cfg = (Config *)malloc(sizeof(Config));
|
||||||
|
ConfigImplInit(cfg);
|
||||||
|
config_init(&(cfg->cfg));
|
||||||
|
config_set_options(&(cfg->cfg), (CONFIG_OPTION_FSYNC |
|
||||||
|
CONFIG_OPTION_SEMICOLON_SEPARATORS |
|
||||||
|
CONFIG_OPTION_COLON_ASSIGNMENT_FOR_GROUPS |
|
||||||
|
CONFIG_OPTION_OPEN_BRACE_ON_SEPARATE_LINE));
|
||||||
|
if (access(fileName, F_OK))
|
||||||
|
{
|
||||||
|
if (!config_read_file(&(cfg->cfg), fileName))
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s:%d - %s\n", config_error_file(&(cfg->cfg)),
|
||||||
|
config_error_line(&(cfg->cfg)), config_error_text(&(cfg->cfg)));
|
||||||
|
// config_destroy(&(cfg->cfg));
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Write out the new configuration. */
|
||||||
|
if (!config_write_file(&(cfg->cfg), fileName))
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Error while writing file.\n");
|
||||||
|
// config_destroy(&cfg);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return cfg;
|
||||||
|
}
|
20
utils/Config/src/ConfigImpl.h
Normal file
20
utils/Config/src/ConfigImpl.h
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
#ifndef CONFIGIMPL_H
|
||||||
|
#define CONFIGIMPL_H
|
||||||
|
#include "Config.h"
|
||||||
|
#include <libconfig.h>
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
|
#endif
|
||||||
|
typedef struct config Config;
|
||||||
|
typedef struct config
|
||||||
|
{
|
||||||
|
VConfig base;
|
||||||
|
void (*close)(VConfig *);
|
||||||
|
config_t cfg;
|
||||||
|
} Config;
|
||||||
|
Config *NewConfig(const char *fileName);
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif
|
Loading…
Reference in New Issue
Block a user