2424#include "api.h"
2525#include "config.h"
2626
27+ //Needed to get the current trace/debug states for each subsystem.
28+ //Look in tvhlog.c for more details.
29+ #include "bitops.h"
30+ extern bitops_ulong_t tvhlog_debug [TVHLOG_BITARRAY ]; //TVHLOG_BITARRAY is defined in bitops.h
31+ extern bitops_ulong_t tvhlog_trace [TVHLOG_BITARRAY ];
32+
2733static int
2834api_config_capabilities (access_t * perm , void * opaque , const char * op ,
2935 htsmsg_t * args , htsmsg_t * * resp )
@@ -45,17 +51,78 @@ api_memoryinfo_grid
4551 }
4652}
4753
54+ //Return a list of trace/debug subsystems and their description.
55+ static int
56+ api_subsystems_grid
57+ (access_t * perm , void * opaque , const char * op , htsmsg_t * args , htsmsg_t * * resp )
58+ {
59+
60+ int i ;
61+ int counter = 0 ;
62+ int trace_count = 0 ;
63+ int debug_count = 0 ;
64+
65+ htsmsg_t * api_response ;
66+ htsmsg_t * api_item ;
67+
68+ api_response = htsmsg_create_list ();
69+
70+ tvhlog_subsys_t * ts = tvhlog_subsystems ;
71+
72+ for (i = 1 , ts ++ ; i < LS_LAST ; i ++ , ts ++ )
73+ {
74+ api_item = htsmsg_create_map ();
75+ htsmsg_add_u32 (api_item , "id" , i );
76+ htsmsg_add_str (api_item , "subsystem" , ts -> name );
77+ htsmsg_add_str (api_item , "description" , _ (ts -> desc ));
78+
79+ if (test_bit (i , tvhlog_trace ))
80+ {
81+ trace_count ++ ;
82+ htsmsg_add_bool (api_item , "trace" , 1 );
83+ }
84+ else
85+ {
86+ htsmsg_add_bool (api_item , "trace" , 0 );
87+ }
88+
89+ if (test_bit (i , tvhlog_debug ))
90+ {
91+ debug_count ++ ;
92+ htsmsg_add_bool (api_item , "debug" , 1 );
93+ }
94+ else
95+ {
96+ htsmsg_add_bool (api_item , "debug" , 0 );
97+ }
98+
99+ htsmsg_add_msg (api_response , NULL , api_item );
100+
101+ counter ++ ;
102+ }
103+
104+ * resp = htsmsg_create_map ();
105+
106+ htsmsg_add_msg (* resp , "entries" , api_response );
107+ htsmsg_add_u32 (* resp , "traceCount" , trace_count );
108+ htsmsg_add_u32 (* resp , "debugCount" , debug_count );
109+ htsmsg_add_u32 (* resp , "totalCount" , counter );
110+
111+ return 0 ;
112+ }
113+
48114void
49115api_config_init ( void )
50116{
51117 static api_hook_t ah [] = {
52- { "config/capabilities" , ACCESS_OR |ACCESS_WEB_INTERFACE |ACCESS_HTSP_INTERFACE , api_config_capabilities , NULL },
53- { "config/load" , ACCESS_ADMIN , api_idnode_load_simple , & config },
54- { "config/save" , ACCESS_ADMIN , api_idnode_save_simple , & config },
55- { "tvhlog/config/load" , ACCESS_ADMIN , api_idnode_load_simple , & tvhlog_conf },
56- { "tvhlog/config/save" , ACCESS_ADMIN , api_idnode_save_simple , & tvhlog_conf },
57- { "memoryinfo/class" , ACCESS_ADMIN , api_idnode_class , (void * )& memoryinfo_class },
58- { "memoryinfo/grid" , ACCESS_ADMIN , api_idnode_grid , api_memoryinfo_grid },
118+ { "config/capabilities" , ACCESS_OR |ACCESS_WEB_INTERFACE |ACCESS_HTSP_INTERFACE , api_config_capabilities , NULL },
119+ { "config/load" , ACCESS_ADMIN , api_idnode_load_simple , & config },
120+ { "config/save" , ACCESS_ADMIN , api_idnode_save_simple , & config },
121+ { "tvhlog/config/load" , ACCESS_ADMIN , api_idnode_load_simple , & tvhlog_conf },
122+ { "tvhlog/config/save" , ACCESS_ADMIN , api_idnode_save_simple , & tvhlog_conf },
123+ { "tvhlog/subsystem/grid" , ACCESS_ADMIN , api_subsystems_grid , NULL },
124+ { "memoryinfo/class" , ACCESS_ADMIN , api_idnode_class , (void * )& memoryinfo_class },
125+ { "memoryinfo/grid" , ACCESS_ADMIN , api_idnode_grid , api_memoryinfo_grid },
59126 { NULL },
60127 };
61128
0 commit comments