summaryrefslogtreecommitdiffstats
path: root/filescan-utils.h
blob: a74dcb34e576c987d80d522657185a4ce997fb7a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
/*
 * Copyright (C) 2016 "IoT.bzh"
 * Author Fulup Ar Foll <fulup@iot.bzh>
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * reference:
 *   amixer contents; amixer controls;
 *   http://www.tldp.org/HOWTO/Alsa-sound-6.html
 */

#ifndef FILESCAN_UTILS_H
#define FILESCAN_UTILS_H

#ifdef __cplusplus
    extern "C" {
#endif

#include <afb/afb-binding.h>

#if((AFB_BINDING_VERSION == 0) && defined(AFB_BINDING_WANT_DYNAPI))
    extern  afb_dynapi *AFB_default;
    #define AFB_DEBUG(...) AFB_DYNAPI_DEBUG(AFB_default, __VA_ARGS__)
#endif

#include <json-c/json.h>

#ifndef CONTROL_MAXPATH_LEN
  #define CONTROL_MAXPATH_LEN 255
#endif

/**
 * @brief enum describing which mode to use in ScanForConfig function
 *
 */
typedef enum {
  CTL_SCAN_FLAT=0, /**< Simple flat search */
  CTL_SCAN_RECURSIVE=1, /**< Recursive search */
} CtlScanDirModeT;

/**
 * @brief Get rid of the binder name prefix 'afbd-'
 *
 * @param name will be typically the full binder name
 *
 * @return const char*
 */
extern const char *GetMiddleName(const char *name);

/**
 * @brief Get the Binder Name without the prefix set by the AGL appfw 'afbd-'
 *
 * @return const char* the Binder name without the prefix.
 */
extern const char *GetBinderName();

/**
 * @brief Scan a directory searching all files matching pattern:
 * 'prefix*extention'.
 *
 * @param searchPath directory where to begin the searching
 * @param mode either or not the search will be recursive.
 * @param prefix file prefix that will be looking for
 * @param extention file extention that will be looking for
 *
 * @return json_object* a json_object array of object with 2 parts a 'fullpath'
 * describing the fullpath to reach the file and 'filename' containing the
 * matched files.
 */
extern json_object* ScanForConfig (const char* searchPath, CtlScanDirModeT mode, const char *prefix, const char *extension);

/**
 * @brief Get the Binding root directory file descriptor object
 *
 * @param dynapi : Could be NULL if you don't use dynamic api
 *
 * @return char* string representing the path to binding root directory.
 */
extern char *GetBindingDirPath_(int fd);
#if(AFB_BINDING_VERSION == 2)
static inline char *GetBindingDirPath_v2()
{
    return GetBindingDirPath_(afb_daemon_rootdir_get_fd_v2());
}
__attribute__((alias("GetBindingDirPath_v2")))
static char *GetBindingDirPath();
#else
static char *GetBindingDirPath_v3(struct afb_api_x3* apiHandle)
{
    return GetBindingDirPath_(afb_api_x3_rootdir_get_fd(apiHandle));
}
__attribute__((alias("GetBindingDirPath_v3")))
static char *GetBindingDirPath(struct afb_api_x3* apiHandle);
#endif

/**
 * @brief Get the environment directory colon separated path list. This take the
 * prefix add the binder's name then the suffix as environment variable name and
 * also search for another variable without the binder's name (so only
 * prefix+suffix).
 *
 * @param prefix Environment variable prefix
 * @param suffix Environment variable suffix
 *
 * @return const char* a string representing a colon separated path list or NULL
 * is case of error or none environment variables found.
 */
extern const char *getEnvDirList(const char *prefix, const char *suffix);

#ifdef __cplusplus
    }
#endif

#endif /* FILESCAN_UTILS_H */