summaryrefslogtreecommitdiffstats
path: root/filescan-utils.h
blob: 0783ebe7cb87164a73695778a1af2057f61df34a (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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
/*
 * 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 Binder root directory path using root directory fd.
 *
 * @param fd : Binder root directory file descriptor.
 *
 * @return char* string representing the path to the binder root directory.
 */
extern char *GetAFBRootDirPathUsingFd(int fd);

/**
 * @brief Get the Binder root directory path using AFB API.
 *
 * @param apiHandle : pointer to the AFB API.
 *
 * @return char* string representing the path to binder root directory.
 */
extern char *GetAFBRootDirPath(afb_api_t apiHandle);

/**
 * For compatibility issues :
 * 'GetBindingDirPath_' is linked to 'GetAFBRootDirPathUsingFd'
 */
#define GetBindingDirPath_ GetAFBRootDirPathUsingFd

/**
 * For compatibility issues :
 * 'GetBindingDirPath' is linked to 'GetAFBRootDirPathUsingFd'
*/
#if(AFB_BINDING_VERSION == 2)
static inline char *GetAFBRootDirPath_v2()
{
  return GetAFBRootDirPathUsingFd(afb_daemon_rootdir_get_fd());
}
__attribute__((alias("GetAFBRootDirPath_v2")))
static char *GetBindingDirPath();
#else
static char *GetAFBRootDirPath_v3(afb_api_t api)
{
  return GetAFBRootDirPathUsingFd(afb_api_rootdir_get_fd(api));
}
__attribute__((alias("GetAFBRootDirPath_v3")))
static char *GetBindingDirPath(afb_api_t api);
#endif

/*
 * @brief Get the Binding directory
 *
 * @param dynapi : Api use in binding
 *
 * @return char* string representing the path to binding directory.
 * NULL if something wrong happened.
 */
extern char *GetRunningBindingDirPath(afb_api_t apiHandle);

/**
 * @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 */