-SR_PRIV struct sr_dev_driver digitek_dt4000zc_driver_info = {
- .name = "digitek-dt4000zc",
- .longname = "Digitek DT4000ZC",
- .api_version = 1,
- .init = hw_init_digitek_dt4000zc,
- .cleanup = hw_cleanup,
- .scan = hw_scan,
- .dev_list = hw_dev_list,
- .dev_clear = clear_instances,
- .dev_open = hw_dev_open,
- .dev_close = hw_dev_close,
- .info_get = hw_info_get,
- .dev_config_set = hw_dev_config_set,
- .dev_acquisition_start = hw_dev_acquisition_start,
- .dev_acquisition_stop = hw_dev_acquisition_stop,
- .priv = NULL,
-};
-
-SR_PRIV struct sr_dev_driver tekpower_tp4000zc_driver_info = {
- .name = "tekpower-tp4000zc",
- .longname = "TekPower TP4000ZC",
- .api_version = 1,
- .init = hw_init_tekpower_tp4000zc,
- .cleanup = hw_cleanup,
- .scan = hw_scan,
- .dev_list = hw_dev_list,
- .dev_clear = clear_instances,
- .dev_open = hw_dev_open,
- .dev_close = hw_dev_close,
- .info_get = hw_info_get,
- .dev_config_set = hw_dev_config_set,
- .dev_acquisition_start = hw_dev_acquisition_start,
- .dev_acquisition_stop = hw_dev_acquisition_stop,
- .priv = NULL,
-};
-
-SR_PRIV struct sr_dev_driver metex_me31_driver_info = {
- .name = "metex-me31",
- .longname = "Metex ME-31",
- .api_version = 1,
- .init = hw_init_metex_me31,
- .cleanup = hw_cleanup,
- .scan = hw_scan,
- .dev_list = hw_dev_list,
- .dev_clear = clear_instances,
- .dev_open = hw_dev_open,
- .dev_close = hw_dev_close,
- .info_get = hw_info_get,
- .dev_config_set = hw_dev_config_set,
- .dev_acquisition_start = hw_dev_acquisition_start,
- .dev_acquisition_stop = hw_dev_acquisition_stop,
- .priv = NULL,
-};
-
-SR_PRIV struct sr_dev_driver peaktech_3410_driver_info = {
- .name = "peaktech-3410",
- .longname = "PeakTech 3410",
- .api_version = 1,
- .init = hw_init_peaktech_3410,
- .cleanup = hw_cleanup,
- .scan = hw_scan,
- .dev_list = hw_dev_list,
- .dev_clear = clear_instances,
- .dev_open = hw_dev_open,
- .dev_close = hw_dev_close,
- .info_get = hw_info_get,
- .dev_config_set = hw_dev_config_set,
- .dev_acquisition_start = hw_dev_acquisition_start,
- .dev_acquisition_stop = hw_dev_acquisition_stop,
- .priv = NULL,
-};
-
-SR_PRIV struct sr_dev_driver mastech_mas345_driver_info = {
- .name = "mastech-mas345",
- .longname = "MASTECH MAS345",
- .api_version = 1,
- .init = hw_init_mastech_mas345,
- .cleanup = hw_cleanup,
- .scan = hw_scan,
- .dev_list = hw_dev_list,
- .dev_clear = clear_instances,
- .dev_open = hw_dev_open,
- .dev_close = hw_dev_close,
- .info_get = hw_info_get,
- .dev_config_set = hw_dev_config_set,
- .dev_acquisition_start = hw_dev_acquisition_start,
- .dev_acquisition_stop = hw_dev_acquisition_stop,
- .priv = NULL,
-};
-
-SR_PRIV struct sr_dev_driver va_va18b_driver_info = {
- .name = "va-va18b",
- .longname = "V&A VA18B",
- .api_version = 1,
- .init = hw_init_va_va18b,
- .cleanup = hw_cleanup,
- .scan = hw_scan,
- .dev_list = hw_dev_list,
- .dev_clear = clear_instances,
- .dev_open = hw_dev_open,
- .dev_close = hw_dev_close,
- .info_get = hw_info_get,
- .dev_config_set = hw_dev_config_set,
- .dev_acquisition_start = hw_dev_acquisition_start,
- .dev_acquisition_stop = hw_dev_acquisition_stop,
- .priv = NULL,
-};
-
-SR_PRIV struct sr_dev_driver metex_m3640d_driver_info = {
- .name = "metex-m3640d",
- .longname = "Metex M-3640D",
- .api_version = 1,
- .init = hw_init_metex_m3640d,
- .cleanup = hw_cleanup,
- .scan = hw_scan,
- .dev_list = hw_dev_list,
- .dev_clear = clear_instances,
- .dev_open = hw_dev_open,
- .dev_close = hw_dev_close,
- .info_get = hw_info_get,
- .dev_config_set = hw_dev_config_set,
- .dev_acquisition_start = hw_dev_acquisition_start,
- .dev_acquisition_stop = hw_dev_acquisition_stop,
- .priv = NULL,
-};
-
-SR_PRIV struct sr_dev_driver peaktech_4370_driver_info = {
- .name = "peaktech-4370",
- .longname = "PeakTech 4370",
- .api_version = 1,
- .init = hw_init_peaktech_4370,
- .cleanup = hw_cleanup,
- .scan = hw_scan,
- .dev_list = hw_dev_list,
- .dev_clear = clear_instances,
- .dev_open = hw_dev_open,
- .dev_close = hw_dev_close,
- .info_get = hw_info_get,
- .dev_config_set = hw_dev_config_set,
- .dev_acquisition_start = hw_dev_acquisition_start,
- .dev_acquisition_stop = hw_dev_acquisition_stop,
- .priv = NULL,
-};
-
-SR_PRIV struct sr_dev_driver pce_pce_dm32_driver_info = {
- .name = "pce-pce-dm32",
- .longname = "PCE PCE-DM32",
- .api_version = 1,
- .init = hw_init_pce_pce_dm32,
- .cleanup = hw_cleanup,
- .scan = hw_scan,
- .dev_list = hw_dev_list,
- .dev_clear = clear_instances,
- .dev_open = hw_dev_open,
- .dev_close = hw_dev_close,
- .info_get = hw_info_get,
- .dev_config_set = hw_dev_config_set,
- .dev_acquisition_start = hw_dev_acquisition_start,
- .dev_acquisition_stop = hw_dev_acquisition_stop,
- .priv = NULL,
+/* Driver-specific API function wrappers */
+#define HW_INIT(X) \
+static int hw_init_##X(struct sr_context *sr_ctx) { return hw_init(sr_ctx, X); }
+#define HW_CLEANUP(X) \
+static int hw_cleanup_##X(void) { return hw_cleanup(X); }
+#define HW_SCAN(X) \
+static GSList *hw_scan_##X(GSList *options) { return hw_scan(options, X); }
+#define HW_DEV_LIST(X) \
+static GSList *hw_dev_list_##X(void) { return hw_dev_list(X); }
+#define CLEAR_INSTANCES(X) \
+static int clear_instances_##X(void) { return clear_instances(X); }
+#define HW_DEV_ACQUISITION_START(X) \
+static int hw_dev_acquisition_start_##X(const struct sr_dev_inst *sdi, \
+void *cb_data) { return hw_dev_acquisition_start(sdi, cb_data, X); }
+
+/* Driver structs and API function wrappers */
+#define DRV(ID, ID_UPPER, NAME, LONGNAME) \
+HW_INIT(ID_UPPER) \
+HW_CLEANUP(ID_UPPER) \
+HW_SCAN(ID_UPPER) \
+HW_DEV_LIST(ID_UPPER) \
+CLEAR_INSTANCES(ID_UPPER) \
+HW_DEV_ACQUISITION_START(ID_UPPER) \
+SR_PRIV struct sr_dev_driver ID##_driver_info = { \
+ .name = NAME, \
+ .longname = LONGNAME, \
+ .api_version = 1, \
+ .init = hw_init_##ID_UPPER, \
+ .cleanup = hw_cleanup_##ID_UPPER, \
+ .scan = hw_scan_##ID_UPPER, \
+ .dev_list = hw_dev_list_##ID_UPPER, \
+ .dev_clear = clear_instances_##ID_UPPER, \
+ .config_get = NULL, \
+ .config_set = config_set, \
+ .config_list = config_list, \
+ .dev_open = hw_dev_open, \
+ .dev_close = hw_dev_close, \
+ .dev_acquisition_start = hw_dev_acquisition_start_##ID_UPPER, \
+ .dev_acquisition_stop = hw_dev_acquisition_stop, \
+ .priv = NULL, \