1 /*
2  * Copyright (C) 2016 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #include <cutils/properties.h>
18 #ifndef __THERMAL_CLIENT_H__
19 #define __THERMAL_CLIENT_H__
20 
21 #ifdef __cplusplus
22 extern "C" {
23 #endif
24 
25 #define MAX_ACTIONS  (32)
26 
27 /* Enum for supported fields */
28 enum supported_fields {
29 	UNKNOWN_FIELD = 0x0,
30 	DISABLE_FIELD = 0x1,
31 	SAMPLING_FIELD = 0x2,
32 	THRESHOLDS_FIELD = 0x4,
33 	SET_POINT_FIELD = THRESHOLDS_FIELD,
34 	THRESHOLDS_CLR_FIELD = 0x8,
35 	SET_POINT_CLR_FIELD = THRESHOLDS_CLR_FIELD,
36 	ACTION_INFO_FIELD = 0x10,
37 	SUPPORTED_FIELD_MAX = 0x20,
38 };
39 
40 enum field_data_type {
41 	FIELD_INT = 0,
42 	FIELD_STR,
43 	FIELD_INT_ARR,
44 	FIELD_ARR_STR,
45 	FIELD_ARR_INT_ARR,
46 	FIELD_MAX
47 };
48 
49 struct action_info_data {
50 	int info[MAX_ACTIONS];
51 	uint32_t num_actions;
52 };
53 
54 struct field_data {
55 	char *field_name;
56 	enum field_data_type data_type;
57 	uint32_t num_data;
58 	void *data;
59 };
60 
61 struct config_instance {
62 	char *cfg_desc;
63 	char *algo_type;
64 	unsigned int fields_mask;  /* mask set by client to request to adjust supported fields */
65 	uint32_t num_fields;
66 	struct field_data *fields;
67 };
68 
69 int thermal_client_config_query(char *algo_type, struct config_instance **configs);
70 void thermal_client_config_cleanup(struct config_instance *configs, unsigned int config_size);
71 int thermal_client_config_set(struct config_instance *configs, unsigned int config_size);
72 
73 int thermal_client_register_callback(char *client_name, int (*callback)(int , void *, void *), void *data);
74 int thermal_client_request(char *client_name, int req_data);
75 void thermal_client_unregister_callback(int client_cb_handle);
76 
77 #ifdef __cplusplus
78 }
79 #endif
80 
81 #endif /* __THERMAL_CLIENT_H__ */
82