Re: [PATCH BlueZ v2 2/7] tools/btgatt-server: Introduce btgatt-server.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Arman,

On Fri, Nov 14, 2014 at 4:49 AM, Arman Uguray <armansito@xxxxxxxxxxxx> wrote:
> This patch introduces tools/btgatt-server, which is a command-line tool
> for testing and debugging shared/gatt-server.
> ---
>  .gitignore            |   1 +
>  Makefile.tools        |   8 +++
>  tools/btgatt-server.c | 139 ++++++++++++++++++++++++++++++++++++++++++++++++++
>  3 files changed, 148 insertions(+)
>  create mode 100644 tools/btgatt-server.c
>
> diff --git a/.gitignore b/.gitignore
> index 164cc97..82304b0 100644
> --- a/.gitignore
> +++ b/.gitignore
> @@ -75,6 +75,7 @@ tools/3dsp
>  tools/obexctl
>  tools/gatt-service
>  tools/btgatt-client
> +tools/btgatt-server
>  tools/mcaptest
>  test/sap_client.pyc
>  test/bluezutils.pyc
> diff --git a/Makefile.tools b/Makefile.tools
> index 75a6faa..4bd683b 100644
> --- a/Makefile.tools
> +++ b/Makefile.tools
> @@ -207,6 +207,14 @@ EXTRA_DIST += tools/hciattach.1 tools/hciconfig.1 \
>                         tools/sdptool.1 tools/ciptool.1 tools/bccmd.1
>  endif
>
> +if TOOLS
> +bin_PROGRAMS += tools/btgatt-server
> +
> +tools_btgatt_server_SOURCES = tools/btgatt-server.c src/uuid-helper.c
> +tools_btgatt_server_LDADD = lib/libbluetooth-internal.la \
> +                                               src/libshared-mainloop.la
> +endif

Shouldn't it be placed under experimental together with btgatt-client?

>  if HID2HCI
>  udevdir = @UDEV_DIR@
>
> diff --git a/tools/btgatt-server.c b/tools/btgatt-server.c
> new file mode 100644
> index 0000000..4508de2
> --- /dev/null
> +++ b/tools/btgatt-server.c
> @@ -0,0 +1,139 @@
> +/*
> + *  BlueZ - Bluetooth protocol stack for Linux
> + *
> + *  Copyright (C) 2014  Google Inc.
> + *
> + *
> + *  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.
> + *
> + *  This program is distributed in the hope that it will be useful,
> + *  but WITHOUT ANY WARRANTY; without even the implied warranty of
> + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + *  GNU General Public License for more details.
> + *
> + */
> +
> +#ifdef HAVE_CONFIG_H
> +#include <config.h>
> +#endif
> +
> +#include <stdio.h>
> +#include <stdbool.h>
> +#include <stdint.h>
> +#include <stdlib.h>
> +#include <getopt.h>
> +
> +#include <bluetooth/bluetooth.h>
> +#include <bluetooth/hci.h>
> +#include <bluetooth/hci_lib.h>
> +#include <bluetooth/l2cap.h>
> +#include "lib/uuid.h"
> +
> +static bool verbose = false;
> +
> +static void usage(void)
> +{
> +       printf("btgatt-server\n");
> +       printf("Usage:\n\tbtgatt-server [options]\n");
> +
> +       printf("Options:\n"
> +               "\t-i, --index <id>\t\tSpecify adapter index, e.g. hci0\n"
> +               "\t-m, --mtu <mtu>\t\t\tThe ATT MTU to use\n"
> +               "\t-s, --security-level <sec>\tSet security level (low|"
> +                                                               "medium|high)\n"
> +               "\t-v, --verbose\t\t\tEnable extra logging\n"
> +               "\t-h, --help\t\t\tDisplay help\n");
> +}
> +
> +static struct option main_options[] = {
> +       { "index",              1, 0, 'i' },
> +       { "mtu",                1, 0, 'm' },
> +       { "security-level",     1, 0, 's' },
> +       { "verbose",            0, 0, 'v' },
> +       { "help",               0, 0, 'h' },
> +       { }
> +};
> +
> +int main(int argc, char *argv[])
> +{
> +       int opt;
> +       int sec = BT_SECURITY_LOW;
> +       uint16_t mtu = 0;
> +       bdaddr_t src_addr;
> +       int dev_id = -1;
> +
> +       while ((opt = getopt_long(argc, argv, "+hvs:m:i:",
> +                                               main_options, NULL)) != -1) {
> +               switch (opt) {
> +               case 'h':
> +                       usage();
> +                       return EXIT_SUCCESS;
> +               case 'v':
> +                       verbose = true;
> +                       break;
> +               case 's':
> +                       if (strcmp(optarg, "low") == 0)
> +                               sec = BT_SECURITY_LOW;
> +                       else if (strcmp(optarg, "medium") == 0)
> +                               sec = BT_SECURITY_MEDIUM;
> +                       else if (strcmp(optarg, "high") == 0)
> +                               sec = BT_SECURITY_HIGH;
> +                       else {
> +                               fprintf(stderr, "Invalid security level\n");
> +                               return EXIT_FAILURE;
> +                       }
> +                       break;
> +               case 'm': {
> +                       int arg;
> +
> +                       arg = atoi(optarg);
> +                       if (arg <= 0) {
> +                               fprintf(stderr, "Invalid MTU: %d\n", arg);
> +                               return EXIT_FAILURE;
> +                       }
> +
> +                       if (arg > UINT16_MAX) {
> +                               fprintf(stderr, "MTU too large: %d\n", arg);
> +                               return EXIT_FAILURE;
> +                       }
> +
> +                       mtu = (uint16_t)arg;
> +                       break;
> +               }
> +               case 'i':
> +                       dev_id = hci_devid(optarg);
> +                       if (dev_id < 0) {
> +                               perror("Invalid adapter");
> +                               return EXIT_FAILURE;
> +                       }
> +
> +                       break;
> +               default:
> +                       fprintf(stderr, "Invalid option: %c\n", opt);
> +                       return EXIT_FAILURE;
> +               }
> +       }
> +
> +       argc -= optind;
> +       argv -= optind;
> +       optind = 0;
> +
> +       if (argc) {
> +               usage();
> +               return EXIT_SUCCESS;
> +       }
> +
> +       if (dev_id == -1)
> +               bacpy(&src_addr, BDADDR_ANY);
> +       else if (hci_devba(dev_id, &src_addr) < 0) {
> +               perror("Adapter not available");
> +               return EXIT_FAILURE;
> +       }
> +
> +       /* TODO: Set up mainloop and listening LE socket */
> +
> +       return 0;
> +}
> --
> 2.1.0.rc2.206.gedb03e5

Btw, this is breaking the build if applied separately:

tools/btgatt-server.c: In function ‘main’:
tools/btgatt-server.c:64:11: error: variable ‘mtu’ set but not used
[-Werror=unused-but-set-variable]
  uint16_t mtu = 0;
           ^
tools/btgatt-server.c:63:6: error: variable ‘sec’ set but not used
[-Werror=unused-but-set-variable]
  int sec = BT_SECURITY_LOW;
      ^

-- 
Luiz Augusto von Dentz
--
To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux