mirror of
git://projects.qi-hardware.com/ben-wpan.git
synced 2024-11-17 23:40:38 +02:00
tools/lib/: added driver selection and driver-specific parameters to backend
- atrf.c (atrf_open, select_driver, do_atrf_open): added infrastructure for passing the driver name and further parameters to atrf_open - atrf.c (struct atrf_dsc): made "driver" constant - driver.h (struct atrf_driver), atben.c (atben_open), atusb.c (atusb_open): added string argument to the "open" function - atusb.c (atusb_driver): corrected unterminated comment
This commit is contained in:
parent
bc6bce9923
commit
c18d3e58d2
@ -183,7 +183,7 @@ static void atben_reset_rf(void *handle)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void *atben_open(void)
|
static void *atben_open(const char *arg)
|
||||||
{
|
{
|
||||||
struct atben_dsc *dsc;
|
struct atben_dsc *dsc;
|
||||||
|
|
||||||
|
@ -13,6 +13,8 @@
|
|||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <strings.h> /* for strcasecmp */
|
||||||
|
|
||||||
#include "at86rf230.h"
|
#include "at86rf230.h"
|
||||||
|
|
||||||
@ -25,7 +27,7 @@ extern struct atrf_driver atben_driver;
|
|||||||
|
|
||||||
|
|
||||||
struct atrf_dsc {
|
struct atrf_dsc {
|
||||||
struct atrf_driver *driver;
|
const struct atrf_driver *driver;
|
||||||
void *handle;
|
void *handle;
|
||||||
enum atrf_chip_id chip_id;
|
enum atrf_chip_id chip_id;
|
||||||
};
|
};
|
||||||
@ -85,20 +87,63 @@ static enum atrf_chip_id identify(struct atrf_dsc *dsc)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
struct atrf_dsc *atrf_open(void)
|
const static struct atrf_driver *drivers[] = {
|
||||||
|
#ifdef HAVE_BEN
|
||||||
|
&atben_driver,
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_USB
|
||||||
|
&atusb_driver,
|
||||||
|
#endif
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
static const struct atrf_driver *select_driver(const char *arg,
|
||||||
|
const char **opt)
|
||||||
|
{
|
||||||
|
const struct atrf_driver **drv;
|
||||||
|
const char *end;
|
||||||
|
size_t len;
|
||||||
|
|
||||||
|
if (!*drivers) {
|
||||||
|
fprintf(stderr, "no drivers defined\n");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
*opt = NULL;
|
||||||
|
if (!arg) {
|
||||||
|
return *drivers;
|
||||||
|
}
|
||||||
|
|
||||||
|
end = strchr(arg, ':');
|
||||||
|
if (!end)
|
||||||
|
end = strchr(arg, 0);
|
||||||
|
len = arg-end;
|
||||||
|
for (drv = drivers; *drv; drv++)
|
||||||
|
if (!strncasecmp((*drv)->name, arg, len) &&
|
||||||
|
strlen((*drv)->name) == len)
|
||||||
|
break;
|
||||||
|
if (!*drv) {
|
||||||
|
fprintf(stderr, "no driver \"%.*s\" found\n", (int) len, arg);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
if (*end)
|
||||||
|
*opt = end+1;
|
||||||
|
return *drv;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static struct atrf_dsc *do_atrf_open(const char *arg)
|
||||||
{
|
{
|
||||||
struct atrf_dsc *dsc;
|
struct atrf_dsc *dsc;
|
||||||
struct atrf_driver *driver;
|
const struct atrf_driver *driver;
|
||||||
|
const char *opt;
|
||||||
void *handle;
|
void *handle;
|
||||||
|
|
||||||
#ifdef HAVE_USB
|
driver = select_driver(arg, &opt);
|
||||||
driver = &atusb_driver;
|
if (!driver)
|
||||||
#elif HAVE_BEN
|
return NULL;
|
||||||
driver = &atben_driver;
|
handle = driver->open(opt);
|
||||||
#else
|
|
||||||
#error Need either HAVE_USB or HAVE_BEN
|
|
||||||
#endif
|
|
||||||
handle = driver->open();
|
|
||||||
if (!handle)
|
if (!handle)
|
||||||
return NULL;
|
return NULL;
|
||||||
dsc = malloc(sizeof(*dsc));
|
dsc = malloc(sizeof(*dsc));
|
||||||
@ -113,6 +158,12 @@ struct atrf_dsc *atrf_open(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
struct atrf_dsc *atrf_open(void)
|
||||||
|
{
|
||||||
|
return do_atrf_open(NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void atrf_close(struct atrf_dsc *dsc)
|
void atrf_close(struct atrf_dsc *dsc)
|
||||||
{
|
{
|
||||||
if (dsc->driver->close)
|
if (dsc->driver->close)
|
||||||
|
@ -50,7 +50,7 @@ static int atusb_clear_error(void *dsc)
|
|||||||
/* ----- open/close -------------------------------------------------------- */
|
/* ----- open/close -------------------------------------------------------- */
|
||||||
|
|
||||||
|
|
||||||
static void *atusb_open(void)
|
static void *atusb_open(const char *arg)
|
||||||
{
|
{
|
||||||
usb_dev_handle *dev;
|
usb_dev_handle *dev;
|
||||||
|
|
||||||
@ -281,7 +281,7 @@ struct atrf_driver atusb_driver = {
|
|||||||
.reset = atusb_reset,
|
.reset = atusb_reset,
|
||||||
.reset_rf = atusb_reset_rf,
|
.reset_rf = atusb_reset_rf,
|
||||||
.test_mode = atusb_test_mode,
|
.test_mode = atusb_test_mode,
|
||||||
.slp_tr = NULL, /* @@@ not yet *
|
.slp_tr = NULL, /* @@@ not yet */
|
||||||
.set_clkm = atusb_set_clkm,
|
.set_clkm = atusb_set_clkm,
|
||||||
.reg_write = atusb_reg_write,
|
.reg_write = atusb_reg_write,
|
||||||
.reg_read = atusb_reg_read,
|
.reg_read = atusb_reg_read,
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
|
|
||||||
struct atrf_driver {
|
struct atrf_driver {
|
||||||
const char *name;
|
const char *name;
|
||||||
void *(*open)(void);
|
void *(*open)(const char *arg);
|
||||||
void (*close)(void *dsc);
|
void (*close)(void *dsc);
|
||||||
int (*error)(void *dsc);
|
int (*error)(void *dsc);
|
||||||
int (*clear_error)(void *dsc);
|
int (*clear_error)(void *dsc);
|
||||||
|
Loading…
Reference in New Issue
Block a user