sr: remove unused argument from hardware driver function init()

It was actually used in one way: the session file loaded abused it for
passing in the filename -- something it definitely wasn't intended for.
This now uses the proper way to pass arguments to a driver: the new
SR_HWCAP_SESSIONFILE.

The OLS driver could also use it as an indication of the serial port to
use instead of actively probing all serial ports on the system, but there
wasn't any frontend code that passed in such a parameter, making it
entirely useless. That will soon be handled differently with the new
scan() API call, regardless.
This commit is contained in:
Bert Vermeulen 2012-07-03 12:55:46 +02:00
parent 0d012ede9d
commit 40dda2c3a5
13 changed files with 30 additions and 51 deletions

View File

@ -405,7 +405,7 @@ static int bin2bitbang(const char *filename,
return SR_OK;
}
static int hw_init(const char *devinfo)
static int hw_init(void)
{
struct sr_dev_inst *sdi;
struct context *ctx;
@ -413,9 +413,6 @@ static int hw_init(const char *devinfo)
char serial_txt[10];
uint32_t serial;
/* Avoid compiler warnings. */
(void)devinfo;
if (!(ctx = g_try_malloc(sizeof(struct context)))) {
sr_err("sigma: %s: ctx malloc failed", __func__);
return SR_ERR_MALLOC;

View File

@ -39,16 +39,13 @@ static const uint16_t usb_pids[] = {
/* Function prototypes. */
static int hw_dev_acquisition_stop(int dev_index, void *cb_data);
static int hw_init(const char *devinfo)
static int hw_init(void)
{
int ret;
struct sr_dev_inst *sdi;
struct context *ctx;
unsigned int i;
/* Avoid compiler errors. */
(void)devinfo;
/* Allocate memory for our private driver context. */
if (!(ctx = g_try_malloc(sizeof(struct context)))) {
sr_err("la8: %s: struct context malloc failed", __func__);

View File

@ -140,13 +140,10 @@ static int thread_running;
static int hw_dev_acquisition_stop(int dev_index, void *cb_data);
static int hw_init(const char *devinfo)
static int hw_init(void)
{
struct sr_dev_inst *sdi;
/* Avoid compiler warnings. */
(void)devinfo;
sdi = sr_dev_inst_new(0, SR_ST_ACTIVE, DEMONAME, NULL, NULL);
if (!sdi) {
sr_err("demo: %s: sr_dev_inst_new failed", __func__);

View File

@ -382,7 +382,7 @@ static struct context *fx2lafw_dev_new(void)
* API callbacks
*/
static int hw_init(const char *devinfo)
static int hw_init(void)
{
struct sr_dev_inst *sdi;
struct libusb_device_descriptor des;
@ -393,9 +393,6 @@ static int hw_init(const char *devinfo)
int devcnt = 0;
int i, j;
/* Avoid compiler warnings. */
(void)devinfo;
if (libusb_init(&usb_context) != 0) {
sr_warn("fx2lafw: Failed to initialize libusb.");
return 0;

View File

@ -56,15 +56,12 @@ SR_PRIV GSList *genericdmm_dev_insts = NULL;
SR_PRIV libusb_context *genericdmm_usb_context = NULL;
static int hw_init(const char *devinfo)
static int hw_init(void)
{
struct sr_dev_inst *sdi;
struct context *ctx;
int devcnt = 0;
/* Avoid compiler warnings. */
(void)devinfo;
if (libusb_init(&genericdmm_usb_context) != 0) {
sr_err("genericdmm: Failed to initialize USB.");
return 0;

View File

@ -200,7 +200,7 @@ static int configure_probes(struct context *ctx, const GSList *probes)
return SR_OK;
}
static int hw_init(const char *devinfo)
static int hw_init(void)
{
struct sr_dev_inst *sdi;
struct libusb_device_descriptor des;
@ -209,9 +209,6 @@ static int hw_init(const char *devinfo)
libusb_device **devlist;
int err, devcnt, i, j;
/* Avoid compiler warnings. */
(void)devinfo;
if (libusb_init(&usb_context) != 0) {
sr_err("hantek-dso: Failed to initialize USB.");
return 0;

View File

@ -401,7 +401,7 @@ static int mso_parse_serial(const char *iSerial, const char *iProduct,
return SR_OK;
}
static int hw_init(const char *devinfo)
static int hw_init(void)
{
struct sr_dev_inst *sdi;
int devcnt = 0;
@ -410,8 +410,6 @@ static int hw_init(const char *devinfo)
struct udev_list_entry *devs, *dev_list_entry;
struct context *ctx;
devinfo = devinfo;
/* It's easier to map usb<->serial using udev */
/*
* FIXME: On windows we can get the same information from the

View File

@ -348,7 +348,7 @@ static struct sr_dev_inst *get_metadata(int fd)
return sdi;
}
static int hw_init(const char *devinfo)
static int hw_init(void)
{
struct sr_dev_inst *sdi;
struct context *ctx;
@ -359,12 +359,8 @@ static int hw_init(const char *devinfo)
final_devcnt = 0;
if (devinfo)
ports = g_slist_append(NULL, g_strdup(devinfo));
else
/* No specific device given, so scan all serial ports. */
ports = list_serial_ports();
/* Scan all serial ports. */
ports = list_serial_ports();
num_ports = g_slist_length(ports);
if (!(fds = g_try_malloc0(num_ports * sizeof(GPollFD)))) {

View File

@ -327,7 +327,7 @@ static int configure_probes(struct sr_dev_inst *sdi, const GSList *probes)
* API callbacks
*/
static int hw_init(const char *devinfo)
static int hw_init(void)
{
struct sr_dev_inst *sdi;
struct libusb_device_descriptor des;
@ -335,9 +335,6 @@ static int hw_init(const char *devinfo)
int ret, devcnt, i;
struct context *ctx;
/* Avoid compiler warnings. */
(void)devinfo;
/* Allocate memory for our private driver context. */
if (!(ctx = g_try_malloc(sizeof(struct context)))) {
sr_err("zp: %s: ctx malloc failed", __func__);

View File

@ -144,7 +144,7 @@ SR_API int sr_driver_init(struct sr_dev_driver *driver)
char **probe_names;
sr_dbg("initializing %s driver", driver->name);
num_devs = driver->init(NULL);
num_devs = driver->init();
for (i = 0; i < num_devs; i++) {
num_probes = GPOINTER_TO_INT(
driver->dev_info_get(i, SR_DI_NUM_PROBES));

View File

@ -337,6 +337,9 @@ enum {
/*--- Special stuff -------------------------------------------------*/
/** Session filename */
SR_HWCAP_SESSIONFILE,
/* TODO: Better description. */
/** The device supports specifying a capturefile to inject. */
SR_HWCAP_CAPTUREFILE,
@ -467,7 +470,7 @@ struct sr_dev_driver {
char *name;
char *longname;
int api_version;
int (*init) (const char *devinfo);
int (*init) (void);
int (*cleanup) (void);
/* Device-specific */

View File

@ -30,6 +30,7 @@
#define CHUNKSIZE (512 * 1024)
struct session_vdev {
char *sessionfile;
char *capturefile;
struct zip *archive;
struct zip_file *capfile;
@ -39,7 +40,6 @@ struct session_vdev {
int num_probes;
};
static char *sessionfile = NULL;
static GSList *dev_insts = NULL;
static const int hwcaps[] = {
SR_HWCAP_CAPTUREFILE,
@ -148,9 +148,8 @@ static int hw_cleanup(void);
*
* @return TODO.
*/
static int hw_init(const char *devinfo)
static int hw_init(void)
{
sessionfile = g_strdup(devinfo);
return 0;
}
@ -169,8 +168,6 @@ static int hw_cleanup(void)
sr_session_source_remove(-1);
g_free(sessionfile);
return SR_OK;
}
@ -246,6 +243,11 @@ static int hw_dev_config_set(int dev_index, int hwcap, const void *value)
sr_info("session driver: setting samplerate to %" PRIu64,
vdev->samplerate);
break;
case SR_HWCAP_SESSIONFILE:
vdev->sessionfile = g_strdup(value);
sr_info("session driver: setting sessionfile to %s",
vdev->sessionfile);
break;
case SR_HWCAP_CAPTUREFILE:
vdev->capturefile = g_strdup(value);
sr_info("session driver: setting capturefile to %s",
@ -280,24 +282,24 @@ static int hw_dev_acquisition_start(int dev_index, void *cb_data)
if (!(vdev = get_vdev_by_index(dev_index)))
return SR_ERR;
sr_info("session_driver: opening archive %s file %s", sessionfile,
sr_info("session_driver: opening archive %s file %s", vdev->sessionfile,
vdev->capturefile);
if (!(vdev->archive = zip_open(sessionfile, 0, &ret))) {
if (!(vdev->archive = zip_open(vdev->sessionfile, 0, &ret))) {
sr_err("session driver: Failed to open session file '%s': "
"zip error %d\n", sessionfile, ret);
"zip error %d\n", vdev->sessionfile, ret);
return SR_ERR;
}
if (zip_stat(vdev->archive, vdev->capturefile, 0, &zs) == -1) {
sr_err("session driver: Failed to check capture file '%s' in "
"session file '%s'.", vdev->capturefile, sessionfile);
"session file '%s'.", vdev->capturefile, vdev->sessionfile);
return SR_ERR;
}
if (!(vdev->capfile = zip_fopen(vdev->archive, vdev->capturefile, 0))) {
sr_err("session driver: Failed to open capture file '%s' in "
"session file '%s'.", vdev->capturefile, sessionfile);
"session file '%s'.", vdev->capturefile, vdev->sessionfile);
return SR_ERR;
}

View File

@ -117,8 +117,9 @@ SR_API int sr_session_load(const char *filename)
dev = sr_dev_new(&session_driver, devcnt);
if (devcnt == 0)
/* first device, init the driver */
dev->driver->init((char *)filename);
dev->driver->init();
sr_session_dev_add(dev);
dev->driver->dev_config_set(devcnt, SR_HWCAP_SESSIONFILE, filename);
dev->driver->dev_config_set(devcnt, SR_HWCAP_CAPTUREFILE, val);
g_ptr_array_add(capturefiles, val);
} else if (!strcmp(keys[j], "samplerate")) {