22 #include <sys/types.h>
28 #include "libsigrok-internal.h"
31 #define LOG_PREFIX "hwdriver: "
32 #define sr_log(l, s, args...) sr_log(l, LOG_PREFIX s, ## args)
33 #define sr_spew(s, args...) sr_spew(LOG_PREFIX s, ## args)
34 #define sr_dbg(s, args...) sr_dbg(LOG_PREFIX s, ## args)
35 #define sr_info(s, args...) sr_info(LOG_PREFIX s, ## args)
36 #define sr_warn(s, args...) sr_warn(LOG_PREFIX s, ## args)
37 #define sr_err(s, args...) sr_err(LOG_PREFIX s, ## args)
57 "Serial communication", NULL},
61 "Pre-trigger capture ratio", NULL},
63 "Pattern generator mode", NULL},
65 "Trigger types", NULL},
67 "Run Length Encoding", NULL},
69 "Trigger slope", NULL},
71 "Trigger source", NULL},
73 "Horizontal trigger position", NULL},
79 "Filter targets", NULL},
86 {0, 0, NULL, NULL, NULL},
90 #ifdef HAVE_HW_BRYMEN_DMM
93 #ifdef HAVE_HW_COLEAD_SLM
99 #ifdef HAVE_HW_LASCAR_EL_USB
102 #ifdef HAVE_HW_MIC_985XX
109 #ifdef HAVE_HW_RIGOL_DS1XX2
112 #ifdef HAVE_HW_TONDAJ_SL_814
115 #ifdef HAVE_HW_VICTOR_DMM
118 #ifdef HAVE_LA_ZEROPLUS_LOGIC_CUBE
121 #ifdef HAVE_LA_ASIX_SIGMA
124 #ifdef HAVE_LA_CHRONOVU_LA8
130 #ifdef HAVE_LA_FX2LAFW
133 #ifdef HAVE_HW_HANTEK_DSO
136 #ifdef HAVE_HW_AGILENT_DMM
139 #ifdef HAVE_HW_FLUKE_DMM
142 #ifdef HAVE_HW_SERIAL_DMM
162 #ifdef HAVE_HW_UNI_T_DMM
173 #ifdef HAVE_HW_BRYMEN_DMM
174 &brymen_bm857_driver_info,
176 #ifdef HAVE_HW_COLEAD_SLM
177 &colead_slm_driver_info,
182 #ifdef HAVE_HW_LASCAR_EL_USB
183 &lascar_el_usb_driver_info,
185 #ifdef HAVE_HW_MIC_985XX
186 &mic_98581_driver_info,
187 &mic_98583_driver_info,
192 #ifdef HAVE_HW_RIGOL_DS1XX2
193 &rigol_ds1xx2_driver_info,
195 #ifdef HAVE_HW_TONDAJ_SL_814
196 &tondaj_sl_814_driver_info,
198 #ifdef HAVE_HW_VICTOR_DMM
199 &victor_dmm_driver_info,
201 #ifdef HAVE_LA_ZEROPLUS_LOGIC_CUBE
202 &zeroplus_logic_cube_driver_info,
204 #ifdef HAVE_LA_ASIX_SIGMA
205 &asix_sigma_driver_info,
207 #ifdef HAVE_LA_CHRONOVU_LA8
208 &chronovu_la8_driver_info,
213 #ifdef HAVE_LA_FX2LAFW
214 &fx2lafw_driver_info,
216 #ifdef HAVE_HW_HANTEK_DSO
217 &hantek_dso_driver_info,
219 #ifdef HAVE_HW_AGILENT_DMM
222 #ifdef HAVE_HW_FLUKE_DMM
223 &flukedmm_driver_info,
225 #ifdef HAVE_HW_SERIAL_DMM
226 &digitek_dt4000zc_driver_info,
227 &tekpower_tp4000zc_driver_info,
228 &metex_me31_driver_info,
229 &peaktech_3410_driver_info,
230 &mastech_mas345_driver_info,
231 &va_va18b_driver_info,
232 &metex_m3640d_driver_info,
233 &peaktech_4370_driver_info,
234 &pce_pce_dm32_driver_info,
235 &radioshack_22_168_driver_info,
236 &radioshack_22_805_driver_info,
237 &radioshack_22_812_driver_info,
238 &tecpel_dmm_8060_ser_driver_info,
239 &tecpel_dmm_8061_ser_driver_info,
240 &voltcraft_vc820_ser_driver_info,
241 &voltcraft_vc840_ser_driver_info,
242 &uni_t_ut61d_ser_driver_info,
243 &uni_t_ut61e_ser_driver_info,
245 #ifdef HAVE_HW_UNI_T_DMM
246 &tecpel_dmm_8060_driver_info,
247 &tecpel_dmm_8061_driver_info,
248 &uni_t_ut61d_driver_info,
249 &uni_t_ut61e_driver_info,
250 &voltcraft_vc820_driver_info,
251 &voltcraft_vc840_driver_info,
288 sr_err(
"Invalid libsigrok context, can't initialize.");
293 sr_err(
"Invalid driver, can't initialize.");
297 sr_spew(
"Initializing driver '%s'.", driver->
name);
298 if ((ret = driver->
init(ctx)) < 0)
299 sr_err(
"Failed to initialize the driver: %d.", ret);
332 sr_err(
"Invalid driver, can't scan for devices.");
337 sr_err(
"Driver not initialized, can't scan for devices.");
341 l = driver->
scan(options);
343 sr_spew(
"Scan of '%s' found %d devices.", driver->
name,
350 SR_PRIV void sr_hw_cleanup_all(
void)
356 for (i = 0; drivers[i]; i++) {
367 if (!(src = g_try_malloc(
sizeof(
struct sr_config))))
370 src->
data = g_variant_ref_sink(data);
378 if (!src || !src->
data) {
379 sr_err(
"%s: invalid data!", __func__);
383 g_variant_unref(src->
data);
412 if (!driver || !data)
421 g_variant_ref_sink(*data);
445 g_variant_ref_sink(data);
447 if (!sdi || !sdi->
driver || !data)
454 g_variant_unref(data);
482 if (!driver || !data)
487 g_variant_ref_sink(*data);
504 for (i = 0; sr_config_info_data[i].
key; i++) {
505 if (sr_config_info_data[i].key == key)
506 return &sr_config_info_data[i];
524 for (i = 0; sr_config_info_data[i].
key; i++) {
525 if (!strcmp(sr_config_info_data[i].
id, optname))
526 return &sr_config_info_data[i];
535 SR_PRIV int sr_source_remove(
int fd)
541 SR_PRIV int sr_source_add(
int fd,
int events,
int timeout,