00001 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 #ifndef DISCOVER_H
00031 #define DISCOVER_H
00032 
00033 #include <stdbool.h>
00034 
00035 #ifdef __cplusplus
00036     extern "C" {
00037 #endif
00038 
00073 typedef enum {
00075     DISCOVER_SUCCESS,
00077     DISCOVER_EIO,
00079     DISCOVER_EXML,
00081     DISCOVER_ESYS,
00083     DISCOVER_EBUSDISABLED,
00085     DISCOVER_EBUSNOTFOUND,
00087     DISCOVER_EDATANOTFOUND,
00089     DISCOVER_EDEVICENOTFOUND,
00091     DISCOVER_EBADVERSION,
00093     DISCOVER_ENOIMPL
00094 } discover_error_code_t;
00095 
00096 struct discover_error;
00097 
00099 typedef void *(discover_create_message_t)(struct discover_error **, char *);
00100 
00106 typedef struct discover_error {
00108     discover_error_code_t code;
00110     char *message;
00112     discover_create_message_t *create_message;
00113 } discover_error_t;
00114 
00116 typedef struct discover_bus_map         discover_bus_map_t;
00118 typedef struct discover_device          discover_device_t;
00120 typedef struct discover_data            discover_data_t;
00122 typedef struct discover_xml_busclass    discover_xml_busclass_t;
00124 typedef struct discover_xml_vendor      discover_xml_vendor_t;
00126 typedef struct discover_xml_url         discover_xml_url_t;
00127 
00129 typedef discover_device_t *(discover_device_func_t)(discover_error_t *);
00131 typedef discover_xml_busclass_t *(discover_xml_busclass_func_t)(discover_error_t *);
00133 typedef discover_xml_vendor_t *(discover_xml_vendor_func_t)(discover_error_t *);
00135 typedef discover_xml_url_t *(discover_xml_url_func_t)(discover_error_t *);
00137 typedef void (discover_free_func_t)(void);
00138 
00139 #include <discover/sysdep.h>
00141 typedef discover_sysdep_data_t *(discover_sysdep_raw_func_t)(void);
00142 
00146 typedef enum {
00147     ATA,
00148     PCI,
00149     PCMCIA,
00150     SCSI,
00151     USB
00152 } discover_bus_t;
00153 
00157 #define BUS_COUNT 5
00158 
00162 typedef enum {
00163     VENDOR_TYPE,
00164     BUSCLASS_TYPE,
00165     DEVICE_TYPE
00166 } discover_filetype_t;
00167 
00168 
00178 struct discover_bus_map {
00180     char *name;
00182     int scan_default;
00184     int scan_never;
00186     discover_sysdep_raw_func_t *get_raw;
00187 };
00188 
00192 discover_device_t *discover_get_devices(discover_bus_t bus, discover_error_t *status);
00193 
00195 void discover_free_devices(void);
00196 
00197 discover_error_t *discover_error_new(void);
00198 void discover_error_free(discover_error_t *status);
00199 char *discover_strerror(discover_error_t *err);
00200 int discover_major_version(void);
00201 int discover_minor_version(void);
00202 int discover_micro_version(void);
00203 
00204 
00205 
00206 
00207 
00208 discover_device_t *discover_device_new(void);
00209 
00210 
00211 discover_device_t *discover_device_find(char *discover_class,
00212                                              discover_error_t *status);
00213 
00214 char *discover_device_get_data(discover_device_t *device,
00215                                char *path, char *version,
00216                                discover_error_t *status);
00217 
00218 void
00219 discover_device_copy(discover_device_t *src, discover_device_t *dst);
00220 
00221 char *discover_device_get_busclass(discover_device_t *device);
00222 char *discover_device_get_model_id(discover_device_t *device);
00223 char *discover_device_get_model_name(discover_device_t *device);
00224 char *discover_device_get_vendor_id(discover_device_t *device);
00225 char *discover_device_get_vendor_name(discover_device_t *device);
00226 
00227 discover_data_t *
00228 discover_device_get_data_struct(discover_device_t *device);
00229 
00230 discover_device_t *
00231 discover_device_get_next(discover_device_t *device);
00232 
00233 void discover_device_free(discover_device_t *devices, int free_data);
00234 
00235 
00236 
00237 
00238 
00239 discover_data_t *discover_data_new(void);
00240 
00241 char *discover_data_get_class(discover_data_t *data);
00242 char *discover_data_get_text(discover_data_t *data);
00243 discover_data_t *discover_data_get_parent(discover_data_t *data);
00244 discover_data_t *discover_data_get_child(discover_data_t *data);
00245 discover_data_t *discover_data_get_next(discover_data_t *data);
00246 discover_data_t *discover_data_get_prev(discover_data_t *prev);
00247 discover_data_t *discover_data_get_first(discover_data_t *data);
00248 void discover_data_free(discover_data_t *data_tree);
00249 
00250 #ifdef __cplusplus
00251     }
00252 #endif
00253 
00254 #endif
00255 
00256 
00257 
00258 
00259 
00260 
00261 
00262