xref: /rockchip-linux_mpp/mpp/base/inc/mpp_cfg_io.h (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
1*437bfbebSnyanmisaka /* SPDX-License-Identifier: Apache-2.0 OR MIT */
2*437bfbebSnyanmisaka /*
3*437bfbebSnyanmisaka  * Copyright (c) 2025 Rockchip Electronics Co., Ltd.
4*437bfbebSnyanmisaka  */
5*437bfbebSnyanmisaka 
6*437bfbebSnyanmisaka #ifndef __MPP_CFG_IO__
7*437bfbebSnyanmisaka #define __MPP_CFG_IO__
8*437bfbebSnyanmisaka 
9*437bfbebSnyanmisaka #include "rk_mpp_cfg.h"
10*437bfbebSnyanmisaka 
11*437bfbebSnyanmisaka #include "mpp_internal.h"
12*437bfbebSnyanmisaka 
13*437bfbebSnyanmisaka typedef enum MppCfgType_e {
14*437bfbebSnyanmisaka     MPP_CFG_TYPE_INVALID = 0,
15*437bfbebSnyanmisaka 
16*437bfbebSnyanmisaka     /* invalid or empty value type */
17*437bfbebSnyanmisaka     MPP_CFG_TYPE_NULL,
18*437bfbebSnyanmisaka 
19*437bfbebSnyanmisaka     /* leaf type must with name */
20*437bfbebSnyanmisaka     MPP_CFG_TYPE_BOOL,
21*437bfbebSnyanmisaka     MPP_CFG_TYPE_s32,
22*437bfbebSnyanmisaka     MPP_CFG_TYPE_u32,
23*437bfbebSnyanmisaka     MPP_CFG_TYPE_s64,
24*437bfbebSnyanmisaka     MPP_CFG_TYPE_u64,
25*437bfbebSnyanmisaka     MPP_CFG_TYPE_f32,
26*437bfbebSnyanmisaka     MPP_CFG_TYPE_f64,
27*437bfbebSnyanmisaka     MPP_CFG_TYPE_STRING,
28*437bfbebSnyanmisaka     MPP_CFG_TYPE_RAW,
29*437bfbebSnyanmisaka 
30*437bfbebSnyanmisaka     /* branch type */
31*437bfbebSnyanmisaka     MPP_CFG_TYPE_OBJECT,
32*437bfbebSnyanmisaka     MPP_CFG_TYPE_ARRAY,
33*437bfbebSnyanmisaka 
34*437bfbebSnyanmisaka     MPP_CFG_TYPE_BUTT,
35*437bfbebSnyanmisaka } MppCfgType;
36*437bfbebSnyanmisaka 
37*437bfbebSnyanmisaka typedef union MppCfgVal_u {
38*437bfbebSnyanmisaka     rk_bool     b1;
39*437bfbebSnyanmisaka     rk_s32      s32;
40*437bfbebSnyanmisaka     rk_u32      u32;
41*437bfbebSnyanmisaka     rk_s64      s64;
42*437bfbebSnyanmisaka     rk_u64      u64;
43*437bfbebSnyanmisaka     rk_float    f32;
44*437bfbebSnyanmisaka     rk_double   f64;
45*437bfbebSnyanmisaka     void        *str;
46*437bfbebSnyanmisaka     void        *ptr;
47*437bfbebSnyanmisaka } MppCfgVal;
48*437bfbebSnyanmisaka 
49*437bfbebSnyanmisaka typedef void* MppCfgObj;
50*437bfbebSnyanmisaka typedef rk_s32 (*MppCfgObjCond)(MppCfgObj obj);
51*437bfbebSnyanmisaka 
52*437bfbebSnyanmisaka #ifdef __cplusplus
53*437bfbebSnyanmisaka extern "C" {
54*437bfbebSnyanmisaka #endif
55*437bfbebSnyanmisaka 
56*437bfbebSnyanmisaka rk_s32 mpp_cfg_get_object(MppCfgObj *obj, const char *name, MppCfgType type, MppCfgVal *val);
57*437bfbebSnyanmisaka rk_s32 mpp_cfg_get_array(MppCfgObj *obj, const char *name, rk_s32 count);
58*437bfbebSnyanmisaka rk_s32 mpp_cfg_put(MppCfgObj obj);
59*437bfbebSnyanmisaka rk_s32 mpp_cfg_put_all(MppCfgObj obj);
60*437bfbebSnyanmisaka 
61*437bfbebSnyanmisaka /* object tree build */
62*437bfbebSnyanmisaka rk_s32 mpp_cfg_add(MppCfgObj root, MppCfgObj leaf);
63*437bfbebSnyanmisaka /* object tree release */
64*437bfbebSnyanmisaka rk_s32 mpp_cfg_del(MppCfgObj obj);
65*437bfbebSnyanmisaka /* find by name string */
66*437bfbebSnyanmisaka rk_s32 mpp_cfg_find(MppCfgObj *obj, MppCfgObj root, char *name, rk_s32 type);
67*437bfbebSnyanmisaka 
68*437bfbebSnyanmisaka /* attach MppCfgInfo for access location */
69*437bfbebSnyanmisaka rk_s32 mpp_cfg_set_info(MppCfgObj obj, MppCfgInfo *info);
70*437bfbebSnyanmisaka /* attach KmppEntry for access location */
71*437bfbebSnyanmisaka rk_s32 mpp_cfg_set_entry(MppCfgObj obj, KmppEntry *entry);
72*437bfbebSnyanmisaka /* add cfg obj condition for input / output option */
73*437bfbebSnyanmisaka rk_s32 mpp_cfg_set_cond(MppCfgObj obj, MppCfgObjCond cond);
74*437bfbebSnyanmisaka 
75*437bfbebSnyanmisaka void mpp_cfg_dump(MppCfgObj obj, const char *func);
76*437bfbebSnyanmisaka #define mpp_cfg_dump_f(obj) mpp_cfg_dump(obj, __FUNCTION__)
77*437bfbebSnyanmisaka 
78*437bfbebSnyanmisaka /* mark all MppCfgObject ready and build trie for string access */
79*437bfbebSnyanmisaka MppTrie mpp_cfg_to_trie(MppCfgObj obj);
80*437bfbebSnyanmisaka 
81*437bfbebSnyanmisaka /* mpp_cfg output to string and input from string */
82*437bfbebSnyanmisaka rk_s32 mpp_cfg_to_string(MppCfgObj obj, MppCfgStrFmt fmt, char **buf);
83*437bfbebSnyanmisaka rk_s32 mpp_cfg_from_string(MppCfgObj *obj, MppCfgStrFmt fmt, const char *buf);
84*437bfbebSnyanmisaka 
85*437bfbebSnyanmisaka /*
86*437bfbebSnyanmisaka  * obj  - read from file or string and get an object as source
87*437bfbebSnyanmisaka  * type - struct type object root for location table indexing and access
88*437bfbebSnyanmisaka  * st   - struct body to write obj values to
89*437bfbebSnyanmisaka  */
90*437bfbebSnyanmisaka rk_s32 mpp_cfg_to_struct(MppCfgObj obj, MppCfgObj type, void *st);
91*437bfbebSnyanmisaka /*
92*437bfbebSnyanmisaka  * obj  - output object root for the struct values
93*437bfbebSnyanmisaka  * type - struct type object root for location table access
94*437bfbebSnyanmisaka  * st   - struct body to write obj values
95*437bfbebSnyanmisaka  */
96*437bfbebSnyanmisaka rk_s32 mpp_cfg_from_struct(MppCfgObj *obj, MppCfgObj type, void *st);
97*437bfbebSnyanmisaka 
98*437bfbebSnyanmisaka rk_s32 mpp_cfg_print_string(char *buf);
99*437bfbebSnyanmisaka 
100*437bfbebSnyanmisaka #ifdef __cplusplus
101*437bfbebSnyanmisaka }
102*437bfbebSnyanmisaka #endif
103*437bfbebSnyanmisaka 
104*437bfbebSnyanmisaka #endif /* __MPP_CFG_IO__ */
105