TT12-MCU/applications/cfg.c

278 lines
5.8 KiB
C
Raw Normal View History

/*
* Copyright (c) 2006-2021, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2023-05-29 murmur the first version
*/
//#include "../packages/minIni-v1.2.0/dev/minIni.h"
#include "minIni.h"
#ifdef PKG_USING_MININI
#define LJW_CFG_FILE_NAME "/cfg/cfg.ini"
#define LOG_TAG "cfg"
#define LOG_LVL LOG_LVL_DBG
#include <ulog.h>
#include "cfg.h"
//extern struct rt_messagequeue update_cfg;//main线程
struct rt_event update_cfg;
void iniEvent(void)
{
/* 事 件 控 制 块 */
rt_err_t result = rt_event_init(&update_cfg, "cfg", RT_IPC_FLAG_FIFO);
if (result != RT_EOK)
{
LOG_E("init event failed.\n");
// return -1;
}
}
/* 导出到自动初始化 */
//INIT_COMPONENT_EXPORT(iniEvent);
/**
* config项
* @param s
* @param k
* @param v
* @return
*/
int set_cfg(const char *k, const char*v)
{
if (rt_strcmp(v,"NULL") == 0) {//delete key
v = NULL;
}
int rst = ini_puts("config",k,v,LJW_CFG_FILE_NAME);
if (rst == 1) {
LOG_I("set value success.");
//以下消息队列通知各线程更新参数
// CFG_MSG msg;
// rt_err_t result;
2023-06-02 06:37:58 +00:00
rt_event_send(&update_cfg, CFGCHANGEED|COMPRESSTYPE);
rt_event_send(&update_cfg, CFGCHANGEED|MAXSIZEPERFILE);
}
else {
LOG_E("set value fault.");
}
return rst;
}
int get_cfg(const char *k)
{
// char buf[MAX_KEY_LEN];
// int rst = ini_gets("config",k,"000000",buf,MAX_KEY_LEN,LJW_CFG_FILE_NAME);
// if(strcmp(buf, "000000") == 0) {
// // 采用默认值
int rst = ini_getl("config", k, -1, LJW_CFG_FILE_NAME);
if (rst == -1) {
LOG_W("no such KEY:%s",k);
return -RT_ERROR;
}
else {
// LOG_I("%s = %s",k,buf);
LOG_I("%s = %d",k,rst);
}
return rst;
}
void get_cfg_all(void)
{
char buf[MAX_KEY_LEN];
char kstr[MAX_KEY_LEN];
LOG_I("%23s","---CONFIG---");
for (size_t k = 0; ini_getkey("config", k, kstr, MAX_KEY_LEN, LJW_CFG_FILE_NAME) > 0; k++) {
int rst = ini_gets("config",kstr,"000000",buf,MAX_KEY_LEN,LJW_CFG_FILE_NAME);
LOG_I("%16s = %s",kstr,buf);
}
}
void cfg(int argc, char ** argv)
{
if (argc == 1) {//无键无值,遍历
get_cfg_all();
}
if (argc == 2) {//有键无值,查询
get_cfg(argv[1]);
}
if (argc == 3) {//有键有值,设置
set_cfg(argv[1], argv[2]);
}
}
static void get_sta_all(void)
{
char buf[MAX_KEY_LEN];
char kstr[MAX_KEY_LEN];
LOG_I("%23s","---STATS---");
for (size_t k = 0; ini_getkey("stats", k, kstr, MAX_KEY_LEN, LJW_CFG_FILE_NAME) > 0; k++) {
int rst = ini_gets("stats",kstr,"000000",buf,MAX_KEY_LEN,LJW_CFG_FILE_NAME);
LOG_I("%16s = %s",kstr,buf);
}
}
MSH_CMD_EXPORT(cfg, config params. )
//以下针对stats
/**
*
* @param k
* return RT_ERROR
*/
long get_val(const char *k)
{
long v= ini_getl("stats", k, -1, LJW_CFG_FILE_NAME);
if( v == -1)
{
LOG_W("no such KEY:%s",k);
return -RT_ERROR;
}
else {
return v;
}
}
int set_val(const char *k, long v)
{
if(!ini_putl("stats",k,v,LJW_CFG_FILE_NAME))
{
LOG_E("write %s error.",k);
return -RT_ERROR;
}
return RT_EOK;
}
/**
* 1
* @param k
* @return
*/
int add_val(const char *k)
{
long ori = get_val(k);
if (ori != -1) {
return set_val(k, ori+1);
}
else {
return ori;
}
}
static void get_sta(const char *k)
{
long v = get_val(k);
if (!v) {
LOG_I("%s = %d",k,v);
}
}
void sta(int argc, char ** argv)
{
if (argc == 1)
{ //无键无值,遍历
get_sta_all();
}
if (argc == 2)
{ //有键无值,查询
get_sta(argv[1]);
}
if (argc == 3)
{
LOG_W("READ ONLY.");
}
}
MSH_CMD_EXPORT(sta, )
static void clear_sta(void)
{
char buf[16];
char kstr[16];
for (size_t k = 0; ini_getkey("stats", k, kstr, 16, LJW_CFG_FILE_NAME) > 0; k++) {
if (rt_strcmp("swCnt",kstr) != 0) {
set_val(kstr, NULL);
}
}
}
MSH_CMD_EXPORT_ALIAS(clear_sta,clsSta, )
/**
*
* @param f
* @param v
* @return
*/
int setFileToSend(const char *f, int v)
{
int rst = ini_putl(SECTION_TO_SEND, f, v, LJW_CFG_FILE_NAME);
if (!rst) {
LOG_E("add file to send error.");
}
return rst;
}
/**
*
* @param kstr
* @param v 0
* @return
*/
int getFilesToSend(char (*kstr)[MAX_KEY_LEN], int *v)
{
// char buf[MAX_KEY_LEN];
// char kstr[MAX_KEY_LEN];
size_t len=0;
for (size_t k = 0; ini_getkey(SECTION_TO_SEND, k, kstr[len], MAX_KEY_LEN, LJW_CFG_FILE_NAME) > 0; k++) {
v[len] = ini_getl(SECTION_TO_SEND, kstr[len], -1, LJW_CFG_FILE_NAME);
len +=1;
}
return len;
}
/**
*
*/
int clearFileToSend(const char *k)
{
int rst = ini_puts(SECTION_TO_SEND, k, NULL, LJW_CFG_FILE_NAME);
if (!rst) {
LOG_E("clear file to send error.");
}
return rst;
}
void gf()
{
int v[MAX_KEY_LEN];
char kstr[10][MAX_KEY_LEN];
size_t cnt = getFilesToSend(kstr, v);
for (size_t var = 0; var < cnt; ++var) {
LOG_I("%s -- %d",kstr[var],v[var]);
}
}
void add(int argc, char **argv)
{
setFileToSend(argv[1],atoi(argv[2]));
gf();
clearFileToSend(argv[1]);
gf();
}
MSH_CMD_EXPORT(gf, )
2023-06-18 01:34:09 +00:00
//MSH_CMD_EXPORT_ALIAS(add, cf,查看待发送文件列表)
//set_if()
#endif