跳转至

6.3 配置数据存储

配置数据存储SDK主要用于点位配置参数的保存。

1、 使用实例

初始化一个名为config.db的数据库,进行参数写入、读取及参数恢复等操作

#include "paramdb/paramdb.h"
#include <stdio.h>
#include <unistd.h>
#include <assert.h>
#include <string.h>
#include <pthread.h>
#include <stdlib.h>

#define EN_WRITE 1

int main(int argc, char *argv[])
{
    printf("[%s][%d][%s]\r\n", __FUNCTION__, __LINE__, __FILE__);
    ParamDb *db = new ParamDb("./config.db");
    printf("[%s][%d][%s]\r\n", __FUNCTION__, __LINE__, __FILE__);

#if EN_WRITE
    /************************ 写入数据 *************************/
    printf("[%s][%d][%s]\r\n", __FUNCTION__, __LINE__, __FILE__);
    db->SetValue("tab1", 0x0001, 1, 1);
    db->SetValue("tab1", 0x0002, 10);
    db->SetValue("tab1", 0x0003, 100, 1);
    db->SetValue("tab1", 0x0103, 1000);
    db->SetValue("tab2", 0x0001, 1000, 1);
    db->SetValue("tab2", 0x0010, 10000, 1);
    db->SetValue("tab3", 0x1000, 20000);
#endif

    /************************ 读取数据 *************************/
    printf("[%s][%d][%s]\r\n", __FUNCTION__, __LINE__, __FILE__);
    char *tabname =nullptr;
    int addr = 0, value = 0;
    // 读取 “tab1” 0x0001
    tabname = (char *)"tab1";
    addr = 0x0001;
    db->GetValue(tabname, addr, &value);
    printf("tabname=%s, addr=[0x%04X]%d, value=%d\r\n", tabname, addr, addr, value);
    // 读取 “tab1” 0x0002
    tabname = (char *)"tab1";
    addr = 0x0002;
    db->GetValue(tabname, addr, &value);
    printf("tabname=%s, addr=[0x%04X]%d, value=%d\r\n", tabname, addr, addr, value);
    // 读取 “tab1” 0x0003
    tabname = (char *)"tab1";
    addr = 0x0003;
    db->GetValue(tabname, addr, &value);
    printf("tabname=%s, addr=[0x%04X]%d, value=%d\r\n", tabname, addr, addr, value);
    // 读取 “tab1” 0x0103
    tabname = (char *)"tab1";
    addr = 0x0103;
    db->GetValue(tabname, addr, &value);
    printf("tabname=%s, addr=[0x%04X]%d, value=%d\r\n", tabname, addr, addr, value);
    // 读取 “tab2” 0x0001
    tabname = (char *)"tab2";
    addr = 0x0001;
    db->GetValue(tabname, addr, &value);
    printf("tabname=%s, addr=[0x%04X]%d, value=%d\r\n", tabname, addr, addr, value);
    // 读取 “tab2” 0x0010
    tabname = (char *)"tab2";
    addr = 0x0010;
    db->GetValue(tabname, addr, &value);
    printf("tabname=%s, addr=[0x%04X]%d, value=%d\r\n", tabname, addr, addr, value);
    // 读取 “tab3” 0x1000
    tabname = (char *)"tab3";
    addr = 0x1000;
    db->GetValue(tabname, addr, &value);
    printf("tabname=%s, addr=[0x%04X]%d, value=%d\r\n", tabname, addr, addr, value);

#if 0
    // 恢复默认值
    db->RestoreDefaultValue();
#endif

# if 1
    // 将当前值保存为默认值
    db->UpdateDefaultFromCurrent();
#endif

    while(1) {
        sleep(1);
    }

    return 1;
}

2、 ParamDb类

1. 构造函数

/**
 * @brief 构造函数
 *
 * @param dbfile 数据库文件名
 */
ParamDb(const std::string dbfile);

2. 析构函数

/**
 * @brief 析构函数
 */
~ParamDb();

3. 获取点的值

/**
 * @brief 获取点的值
 *
 * @param tabname 表名
 * @param addr 地址
 * @param value 返回值的指针
 *
 * @return 返回1正常;返回-1未找到点位
 */
int GetValue(const std::string tabname, int addr, int *value);
  • 参数
    • tabname 表名
    • addr 地址
    • value 返回值的指针
  • 返回值
    • 返回1正常;返回-1未找到点位

4. 设置点的值(不带默认值)

/**
 * @brief 设置点的值
 *
 * @param tabname 表名
 * @param addr 地址
 * @param value 值
 *
 * @return 返回1正常;
 */
int SetValue(const std::string tabname, int addr, int value);
  • 参数
    • tabname 表名
    • addr 地址
    • value 返回值的指针
  • 返回值
    • 返回1正常;

5. 设置点的值(带默认值)

/**
 * @brief 设置点的值
 *
 * @param tabname 表名
 * @param addr 地址
 * @param value 值
 * @param default_value 默认值
 *
 * @return 返回1正常;
 */
int SetValue(const std::string tabname, int addr, int value, int default_value);
  • 参数
    • tabname 表名
    • addr 地址
    • value 返回值的指针
    • default_value 默认值
  • 返回值
    • 返回1正常;

6. 当前值恢复为默认值

/**
 * @brief 恢复默认值
 * @note 将默认值写入当前值
 *
 * @return 返回1正常
 */
int RestoreDefaultValue();
  • 参数
  • 返回值
    • 返回1正常;

7. 将当前值保存为默认值

/**
 * @brief 将当前值保存为默认值(由当前值更新默认值)
 * @note 将当前值写入默认值
 *
 * @return 返回1正常
 */
int UpdateDefaultFromCurrent();
  • 参数
  • 返回值
    • 返回1正常