@@ -24,111 +24,13 @@ struct load_store_params {
2424 const void * section_top ;
2525};
2626
27- static bool attr_matches (const char * dev_name , size_t dev_len ,
28- const char * attr , size_t attr_len ,
29- const char * key , size_t len , bool debug )
30- {
31- return (!debug && (len == dev_len + 1 + attr_len ) &&
32- !strncmp (key , dev_name , dev_len ) &&
33- !strncmp (key + dev_len + 1 , attr , attr_len )) ||
34- (debug && (len == dev_len + sizeof ("debug." ) + attr_len ) &&
35- !strncmp (key , "debug." , sizeof ("debug." ) - 1 ) &&
36- !strncmp (key + sizeof ("debug." ) - 1 , dev_name , dev_len ) &&
37- !strncmp (key + sizeof ("debug." ) + dev_len , attr , attr_len ));
38- }
39-
40- static bool attr_in_whitelist (const char * attr ,
41- const char * dev_name , size_t dev_len , bool is_debug ,
42- const char * const * whitelist , size_t list_len )
43- {
44- unsigned int i ;
45- for (i = 0 ; i < list_len && whitelist [i ]; i ++ )
46- if ((!is_debug && !strncmp (whitelist [i ], dev_name , dev_len ) &&
47- !strcmp (whitelist [i ] + dev_len + 1 , attr )) ||
48- (is_debug && !strncmp (whitelist [i ], "debug." , sizeof ("debug." ) - 1 ) &&
49- !strncmp (whitelist [i ] + sizeof ("debug." ) - 1 , dev_name , dev_len ) &&
50- !strcmp (whitelist [i ] + sizeof ("debug." ) + dev_len , attr )))
51- return true;
52- return false;
53- }
54-
55- static ssize_t read_from_ini (struct load_store_params * params ,
56- const char * dev_name , size_t name_len ,
57- const char * attr , void * buf , size_t len )
58- {
59- bool found = false;
60- const char * key , * value ;
61- size_t klen , vlen ;
62-
63- if (!len )
64- return 0 ;
65-
66- /* Rewind to the beginning of the section */
67- ini_set_read_pointer (params -> ini , params -> section_top );
68-
69- while (!found && ini_read_pair (params -> ini ,
70- & key , & klen , & value , & vlen ) > 0 )
71- found = attr_matches (dev_name , name_len , attr , strlen (attr ),
72- key , klen , params -> is_debug );
73- if (!found )
74- return 0 ;
75-
76- if (len > vlen )
77- len = vlen ;
78- memcpy (buf , value , len );
79- return (ssize_t ) len ;
80- }
81-
82- static ssize_t update_from_ini_dev_cb (struct iio_device * dev ,
83- const char * attr , void * buf , size_t len , void * d )
84- {
85- struct load_store_params * params = (struct load_store_params * ) d ;
86- const char * dev_name = iio_device_get_name (dev );
87- size_t name_len = dev_name ? strlen (dev_name ) : 0 ;
88-
89- if (attr_in_whitelist (attr , dev_name , name_len , params -> is_debug ,
90- params -> whitelist , params -> list_len ))
91- return read_from_ini (params ,
92- dev_name , name_len , attr , buf , len );
93- return 0 ;
94- }
95-
96- static ssize_t update_from_ini_chn_cb (struct iio_channel * chn ,
97- const char * attr , void * buf , size_t len , void * d )
98- {
99- struct load_store_params * params = (struct load_store_params * ) d ;
100- const char * dev_name = iio_device_get_name (params -> dev );
101- size_t name_len = dev_name ? strlen (dev_name ) : 0 ;
102- bool is_hardwaregain = !strncmp (attr , "hardwaregain" , len );
103- const struct iio_attr * attribute ;
104-
105- attribute = iio_channel_find_attr (chn , attr );
106- attr = iio_attr_get_filename (attribute );
107- if (attr_in_whitelist (attr , dev_name , name_len , false,
108- params -> whitelist , params -> list_len )) {
109- ssize_t ret = read_from_ini (params ,
110- dev_name , name_len , attr , buf , len );
111-
112- /* Dirty workaround that strips the "dB" suffix of
113- * hardwaregain value. Fix me when possible. */
114- if (is_hardwaregain ) {
115- char * tmp = strstr ((char * ) buf , " dB" );
116- if (tmp )
117- * tmp = '\0' ;
118- }
119- return ret ;
120- }
121- return 0 ;
122- }
123-
12427void update_from_ini (const char * ini_file ,
12528 const char * driver_name , struct iio_device * dev ,
12629 const char * const * whitelist , size_t list_len )
12730{
12831 bool found = false;
12932 const char * name ;
13033 size_t nlen , dlen ;
131- unsigned int i ;
13234 struct INI * ini = ini_open (ini_file );
13335 struct load_store_params params = {
13436 .dev = dev ,
@@ -202,70 +104,10 @@ char * read_token_from_ini(const char *ini_file,
202104 return dup ;
203105}
204106
205- static void write_to_ini (struct load_store_params * params , const char * dev_name ,
206- size_t name_len , const char * attr , const char * val , size_t len )
207- {
208- FILE * f = params -> f ;
209-
210- if (params -> is_debug )
211- fwrite ("debug." , 1 , sizeof ("debug." ) - 1 , f );
212- fwrite (dev_name , 1 , name_len , f );
213- fwrite ("." , 1 , 1 , f );
214- fwrite (attr , 1 , strlen (attr ), f );
215- fwrite (" = " , 1 , sizeof (" = " ) - 1 , f );
216- fwrite (val , 1 , len - 1 , f );
217- fwrite ("\n" , 1 , 1 , f );
218- }
219-
220- static int save_to_ini_dev_cb (struct iio_device * dev ,
221- const char * attr , const char * val , size_t len , void * d )
222- {
223- struct load_store_params * params = (struct load_store_params * ) d ;
224- const char * dev_name = iio_device_get_name (dev );
225- size_t name_len = dev_name ? strlen (dev_name ) : 0 ;
226-
227- if (attr_in_whitelist (attr , dev_name , name_len , params -> is_debug ,
228- params -> whitelist , params -> list_len ))
229- write_to_ini (params , dev_name , name_len , attr , val , len );
230- return 0 ;
231- }
232-
233- static int save_to_ini_chn_cb (struct iio_channel * chn ,
234- const char * attr , const char * val , size_t len , void * d )
235- {
236- struct load_store_params * params = (struct load_store_params * ) d ;
237- const char * dev_name = iio_device_get_name (params -> dev );
238- size_t name_len = dev_name ? strlen (dev_name ) : 0 ;
239- const struct iio_attr * attrib ;
240- attrib = iio_channel_find_attr (chn , attr );
241- attr = iio_attr_get_filename (attrib );
242- if (attr_in_whitelist (attr , dev_name , name_len , false,
243- params -> whitelist , params -> list_len ))
244- write_to_ini (params , dev_name , name_len , attr , val , len );
245- return 0 ;
246- }
247-
248107void save_to_ini (FILE * f , const char * driver_name , struct iio_device * dev ,
249108 const char * const * whitelist , size_t list_len )
250109{
251- unsigned int i ;
252- struct load_store_params params = {
253- .dev = dev ,
254- .whitelist = whitelist ,
255- .list_len = list_len ,
256- .is_debug = false,
257- .f = f ,
258- };
259-
260110 write_driver_name_to_ini (f , driver_name );
261-
262- /*for (i = 0; i < iio_device_get_channels_count(dev); i++)
263- iio_channel_attr_read_all(iio_device_get_channel(dev, i),
264- save_to_ini_chn_cb, ¶ms);
265- iio_device_attr_read_all(dev, save_to_ini_dev_cb, ¶ms);
266-
267- params.is_debug = true;
268- iio_device_debug_attr_read_all(dev, save_to_ini_dev_cb, ¶ms);*/
269111}
270112
271113int foreach_in_ini (const char * ini_file ,
0 commit comments