diff --git a/tools/atspi-reset/Makefile b/tools/atspi-reset/Makefile new file mode 100644 index 0000000..4a1c4fe --- /dev/null +++ b/tools/atspi-reset/Makefile @@ -0,0 +1,21 @@ +# +# atspi-reset/Makefile - Reset the transceiver or the whole board +# +# Written 2010 by Werner Almesberger +# Copyright 2010 Werner Almesberger +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# + + +F32XBASE = ../../../f32xbase + +MAIN = atspi-reset + +include $(F32XBASE)/lib/Makefile.common + +CFLAGS += -I../../fw/include -I../include +LDLIBS += -L../lib -latspi diff --git a/tools/atspi-reset/atspi-reset.c b/tools/atspi-reset/atspi-reset.c new file mode 100644 index 0000000..c34e581 --- /dev/null +++ b/tools/atspi-reset/atspi-reset.c @@ -0,0 +1,62 @@ +/* + * atspi-rssi/atspi-rssi.c - ben-wpan AF86RF230 spectrum scan + * + * Written 2010 by Werner Almesberger + * Copyright 2010 Werner Almesberger + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + */ + + +#include +#include +#include +#include + +#include "atspi.h" + + +static void usage(const char *name) +{ + fprintf(stderr, +"usage: %s [-a|-t]\n\n" +" -a reset the MCU and transceiver\n" +" -t reset transceiver (default)\n" + , name); + exit(1); +} + + +int main(int argc, const char **argv) +{ + usb_dev_handle *dev; + int txrx = 1; + + switch (argc) { + case 1: + break; + case 2: + if (!strcmp(argv[1], "-t")) + break; + txrx = 0; + if (!strcmp(argv[1], "-a")) + break; + /* fall through */ + default: + usage(*argv); + } + + dev = atspi_open(); + if (!dev) + return 1; + + if (txrx) + atspi_reset_rf(dev); + else + atspi_reset(dev); + return 0; +} + diff --git a/tools/include/atspi.h b/tools/include/atspi.h index 88206eb..6cd1b10 100644 --- a/tools/include/atspi.h +++ b/tools/include/atspi.h @@ -12,6 +12,9 @@ int atspi_clear_error(void); usb_dev_handle *atspi_open(void); void atspi_close(usb_dev_handle *dev); +void atspi_reset(usb_dev_handle *dev); +void atspi_reset_rf(usb_dev_handle *dev); + void atspi_reg_write(usb_dev_handle *dev, uint8_t reg, uint8_t value); uint8_t atspi_reg_read(usb_dev_handle *dev, uint8_t reg); diff --git a/tools/lib/atspi.c b/tools/lib/atspi.c index 4e8e845..42b27d5 100644 --- a/tools/lib/atspi.c +++ b/tools/lib/atspi.c @@ -71,6 +71,41 @@ void atspi_close(usb_dev_handle *dev) } +/* ----- device mode ------------------------------------------------------- */ + + +void atspi_reset(usb_dev_handle *dev) +{ + int res; + + if (error) + return; + + res = + usb_control_msg(dev, TO_DEV, ATSPI_RESET, 0, 0, NULL, 0, 1000); + if (res < 0) { + fprintf(stderr, "ATSPI_RESET: %d\n", res); + error = 1; + } +} + + +void atspi_reset_rf(usb_dev_handle *dev) +{ + int res; + + if (error) + return; + + res = + usb_control_msg(dev, TO_DEV, ATSPI_RF_RESET, 0, 0, NULL, 0, 1000); + if (res < 0) { + fprintf(stderr, "ATSPI_RF_RESET: %d\n", res); + error = 1; + } +} + + /* ----- register access --------------------------------------------------- */