From c8a252d4edcb821cd2fdb6f59db1e5821b6e8a70 Mon Sep 17 00:00:00 2001 From: Lwazi Dube Date: Sat, 8 Dec 2018 13:02:19 -0600 Subject: [PATCH] apps/wireless/bluetooth/btsak: Remove unnecessary gatt get commands --- wireless/bluetooth/btsak/btsak.h | 8 - wireless/bluetooth/btsak/btsak_gatt.c | 459 +++++++------------------- wireless/bluetooth/btsak/btsak_main.c | 20 -- 3 files changed, 118 insertions(+), 369 deletions(-) diff --git a/wireless/bluetooth/btsak/btsak.h b/wireless/bluetooth/btsak/btsak.h index fb2107d75..7e2013488 100644 --- a/wireless/bluetooth/btsak/btsak.h +++ b/wireless/bluetooth/btsak/btsak.h @@ -252,8 +252,6 @@ void btsak_cmd_security(FAR struct btsak_s *btsak, int argc, FAR char *argv[]); void btsak_cmd_gatt_exchange_mtu(FAR struct btsak_s *btsak, int argc, FAR char *argv[]); -void btsak_cmd_gatt_exchange_mtu_result(FAR struct btsak_s *btsak, int argc, - FAR char *argv[]); void btsak_cmd_connect(FAR struct btsak_s *btsak, int argc, FAR char *argv[]); void btsak_cmd_disconnect(FAR struct btsak_s *btsak, int argc, @@ -264,17 +262,11 @@ void btsak_cmd_gatt_discover_characteristic(FAR struct btsak_s *btsak, int argc, FAR char *argv[]); void btsak_cmd_gatt_discover_descriptor(FAR struct btsak_s *btsak, int argc, FAR char *argv[]); -void btsak_cmd_gatt_discover_get(FAR struct btsak_s *btsak, - int argc, FAR char *argv[]); void btsak_cmd_gatt_read(FAR struct btsak_s *btsak, int argc, FAR char *argv[]); void btsak_cmd_gatt_read_multiple(FAR struct btsak_s *btsak, int argc, FAR char *argv[]); -void btsak_cmd_gatt_read_get(FAR struct btsak_s *btsak, int argc, - FAR char *argv[]); void btsak_cmd_gatt_write(FAR struct btsak_s *btsak, int argc, FAR char *argv[]); -void btsak_cmd_gatt_write_get(FAR struct btsak_s *btsak, int argc, - FAR char *argv[]); #endif /* __APPS_EXAMPLES_WIRELESS_BLUETOOTH_BTSAK_BTSAK_H */ diff --git a/wireless/bluetooth/btsak/btsak_gatt.c b/wireless/bluetooth/btsak/btsak_gatt.c index 434d673b4..2ccbd4175 100644 --- a/wireless/bluetooth/btsak/btsak_gatt.c +++ b/wireless/bluetooth/btsak/btsak_gatt.c @@ -77,6 +77,9 @@ static void btsak_cmd_discover_common(FAR struct btsak_s *btsak, unsigned int argndx; int sockfd; int ret; + FAR struct bt_discresonse_s *rsp; + struct bt_discresonse_s result[CONFIG_BLUETOOTH_MAXDISCOVER]; + int i; /* Check for help command */ @@ -144,6 +147,10 @@ static void btsak_cmd_discover_common(FAR struct btsak_s *btsak, /* Perform the IOCTL to start the discovery */ + btreq.btr_gnrsp = CONFIG_BLUETOOTH_MAXDISCOVER; + btreq.btr_grsp = result; + btreq.btr_indx = 0; + sockfd = btsak_socket(btsak); if (sockfd >= 0) { @@ -155,7 +162,15 @@ static void btsak_cmd_discover_common(FAR struct btsak_s *btsak, } else { - printf("Discovery in progress..\n"); + /* Show the results that we obtained */ + + printf("Discovered %d handles:\n", btreq.btr_gnrsp); + for (i = 0; i < btreq.btr_gnrsp; i++) + { + rsp = &result[i]; + printf("%d.\thandle 0x%04x perm: %02x\n", + i, rsp->dr_handle, rsp->dr_perm); + } } close(sockfd); @@ -226,6 +241,100 @@ static void btsak_cmd_connect_common(FAR struct btsak_s *btsak, int argc, } } +/**************************************************************************** + * Name: btsak_cmd_read_common + * + * Description: + * Function used by the read and read_multiple commands. + * + ****************************************************************************/ + +static void btsak_cmd_read_common(FAR struct btsak_s *btsak, int argc, + FAR char *argv[], bool multiple) +{ + int i; + int j; + int ret; + int sockfd; + uint8_t data[HCI_GATTRD_DATA]; + struct btreq_s btreq; + + memset(&btreq, 0, sizeof(struct btreq_s)); + + if (argc < 4 || argc > 5) + { + fprintf(stderr, + "ERROR: Invalid number of arguments. Found %d expected 3 or 4\n", + argc - 1); + btsak_gatt_showusage(btsak->progname, argv[0], EXIT_FAILURE); + } + + ret = btsak_str2addr(argv[1], btreq.btr_rdpeer.val); + if (ret < 0) + { + fprintf(stderr, "ERROR: Bad value for : %s\n", argv[1]); + btsak_gatt_showusage(btsak->progname, argv[0], EXIT_FAILURE); + } + + ret = btsak_str2addrtype(argv[2], &btreq.btr_rdpeer.type); + if (ret < 0) + { + fprintf(stderr, "ERROR: Bad value for address type: %s\n", argv[2]); + btsak_gatt_showusage(btsak->progname, argv[0], EXIT_FAILURE); + } + + btreq.btr_rdoffset = 0; + btreq.btr_rdnhandles = multiple ? argc - 3 : 1; + + if (!multiple && argc > 4) + { + btreq.btr_rdoffset = btsak_str2uint16(argv[4]); + } + + for (i = 0; i < btreq.btr_rdnhandles; i++) + { + btreq.btr_rdhandles[i] = btsak_str2uint16(argv[i + 3]); + } + + /* Perform the IOCTL to start the read */ + + strncpy(btreq.btr_name, btsak->ifname, IFNAMSIZ); + btreq.btr_rdsize = HCI_GATTRD_DATA; + btreq.btr_rddata = data; + + sockfd = btsak_socket(btsak); + if (sockfd >= 0) + { + ret = ioctl(sockfd, SIOCBTGATTRD, (unsigned long)((uintptr_t)&btreq)); + if (ret < 0) + { + fprintf(stderr, "ERROR: ioctl(SIOCBTGATTRD) failed: %d\n", errno); + } + else + { + /* Show the results that we obtained */ + + printf("Read %d bytes:\n", btreq.btr_rdsize); + for (i = 0; i < btreq.btr_rdsize; i += 16) + { + for (j = 0; j < 16 && (i + j) < btreq.btr_rdsize; j++) + { + if (j == 8) + { + putchar(' '); + } + + printf(" %02x", data[i + j]); + } + + putchar('\n'); + } + } + + close(sockfd); + } +} + /**************************************************************************** * Public functions ****************************************************************************/ @@ -287,54 +396,8 @@ void btsak_cmd_gatt_exchange_mtu(FAR struct btsak_s *btsak, int argc, } else { - printf("MTU exchange pending...\n"); - } - - close(sockfd); - } -} - -/**************************************************************************** - * Name: btsak_cmd_gatt_exchange_mtu_result - * - * Description: - * gatt [-h] mget [-h] command - * - ****************************************************************************/ - -void btsak_cmd_gatt_exchange_mtu_result(FAR struct btsak_s *btsak, int argc, - FAR char *argv[]) -{ - struct btreq_s btreq; - int sockfd; - int ret; - - /* Perform the IOCTL to recover the result of the MTU exchange */ - - strncpy(btreq.btr_name, btsak->ifname, IFNAMSIZ); - - sockfd = btsak_socket(btsak); - if (sockfd >= 0) - { - ret = ioctl(sockfd, SIOCBTEXRESULT, (unsigned long)((uintptr_t)&btreq)); - if (ret < 0) - { - fprintf(stderr, "ERROR: ioctl(SIOCBTEXRESULT) failed: %d\n", - errno); - } - else - { - printf("MTU Exchange Result:\n"); - if (btreq.btr_expending) - { - printf("\tState: Pending\n"); - printf("\tResult: Not yet available\n"); - } - else - { - printf("\tState: Complete\n"); - printf("\tResult: %u\n", btreq.btr_exresult); - } + printf("MTU Exchange %s\n", + btreq.btr_exresult == 0 ? "succeeded" : "failed"); } close(sockfd); @@ -382,68 +445,6 @@ void btsak_cmd_gatt_discover_descriptor(FAR struct btsak_s *btsak, btsak_cmd_discover_common(btsak, argc, argv, GATT_DISCOVER_DESC); } -/**************************************************************************** - * Name: btsak_cmd_gatt_discover_get - * - * Description: - * gatt [-h] dget [-h] - * - ****************************************************************************/ - -void btsak_cmd_gatt_discover_get(FAR struct btsak_s *btsak, - int argc, FAR char *argv[]) -{ - FAR struct bt_discresonse_s *rsp; - struct bt_discresonse_s result[8]; - struct btreq_s btreq; - int sockfd; - int ret; - int i; - - /* Check for help command */ - - if (argc == 2 && strcmp(argv[1], "-h") == 0) - { - btsak_gatt_showusage(btsak->progname, argv[0], EXIT_SUCCESS); - } - - if (argc != 1) - { - fprintf(stderr, "ERROR: No arguments expected\n"); - btsak_gatt_showusage(btsak->progname, argv[0], EXIT_FAILURE); - } - - /* Perform the IOCTL to get the result of the discovery */ - - strncpy(btreq.btr_name, btsak->ifname, IFNAMSIZ); - btreq.btr_gnrsp = 8; - btreq.btr_grsp = result; - - sockfd = btsak_socket(btsak); - if (sockfd >= 0) - { - ret = ioctl(sockfd, SIOCBTDISCGET, (unsigned long)((uintptr_t)&btreq)); - if (ret < 0) - { - fprintf(stderr, "ERROR: ioctl(SIOCBTDISCGET) failed: %d\n", errno); - } - else - { - /* Show the results that we obtained */ - - printf("Discovered:\n"); - for (i = 0; i < btreq.btr_gnrsp; i++) - { - rsp = &result[i]; - printf("%d.\thandle 0x%04x perm: %02x\n", - rsp->dr_handle, rsp->dr_perm); - } - } - - close(sockfd); - } -} - /**************************************************************************** * Name: btsak_cmd_gatt_read * @@ -455,66 +456,12 @@ void btsak_cmd_gatt_discover_get(FAR struct btsak_s *btsak, void btsak_cmd_gatt_read(FAR struct btsak_s *btsak, int argc, FAR char *argv[]) { - struct btreq_s btreq; - int sockfd; - int ret; - if (argc == 2 && strcmp(argv[1], "-h") == 0) { btsak_gatt_showusage(btsak->progname, argv[0], EXIT_SUCCESS); } - if (argc < 4 || argc > 5) - { - fprintf(stderr, - "ERROR: Invalid number of arguments. Found %d expected 3 or 4\n", - argc - 1); - btsak_gatt_showusage(btsak->progname, argv[0], EXIT_FAILURE); - } - - ret = btsak_str2addr(argv[1], btreq.btr_rdpeer.val); - if (ret < 0) - { - fprintf(stderr, "ERROR: Bad value for : %s\n", argv[1]); - btsak_gatt_showusage(btsak->progname, argv[0], EXIT_FAILURE); - } - - ret = btsak_str2addrtype(argv[2], &btreq.btr_rdpeer.type); - if (ret < 0) - { - fprintf(stderr, "ERROR: Bad value for address type: %s\n", argv[2]); - btsak_gatt_showusage(btsak->progname, argv[0], EXIT_FAILURE); - } - - btreq.btr_rdhandles[0] = btsak_str2uint16(argv[3]); - btreq.btr_rdnhandles = 1; - - btreq.btr_rdoffset = 0; - if (argc > 4) - { - btreq.btr_rdoffset = btsak_str2uint16(argv[4]); - } - - /* Perform the IOCTL to start the read */ - - strncpy(btreq.btr_name, btsak->ifname, IFNAMSIZ); - - sockfd = btsak_socket(btsak); - if (sockfd >= 0) - { - ret = ioctl(sockfd, SIOCBTGATTRD, (unsigned long)((uintptr_t)&btreq)); - if (ret < 0) - { - fprintf(stderr, "ERROR: ioctl(SIOCBTGATTRD) failed: %d\n", - errno); - } - else - { - printf("Read pending...\n"); - } - - close(sockfd); - } + btsak_cmd_read_common(btsak, argc, argv, false); } /**************************************************************************** @@ -528,11 +475,6 @@ void btsak_cmd_gatt_read(FAR struct btsak_s *btsak, int argc, void btsak_cmd_gatt_read_multiple(FAR struct btsak_s *btsak, int argc, FAR char *argv[]) { - struct btreq_s btreq; - int sockfd; - int ret; - int i; - if (argc == 2 && strcmp(argv[1], "-h") == 0) { btsak_gatt_showusage(btsak->progname, argv[0], EXIT_SUCCESS); @@ -546,126 +488,7 @@ void btsak_cmd_gatt_read_multiple(FAR struct btsak_s *btsak, int argc, btsak_gatt_showusage(btsak->progname, argv[0], EXIT_FAILURE); } - ret = btsak_str2addr(argv[1], btreq.btr_rdpeer.val); - if (ret < 0) - { - fprintf(stderr, "ERROR: Bad value for : %s\n", argv[1]); - btsak_gatt_showusage(btsak->progname, argv[0], EXIT_FAILURE); - } - - ret = btsak_str2addrtype(argv[2], &btreq.btr_rdpeer.type); - if (ret < 0) - { - fprintf(stderr, "ERROR: Bad value for address type: %s\n", argv[2]); - btsak_gatt_showusage(btsak->progname, argv[0], EXIT_FAILURE); - } - - btreq.btr_rdoffset = 0; - btreq.btr_rdnhandles = argc - 3; - - for (i = 0; i < btreq.btr_rdnhandles; i++) - { - btreq.btr_rdhandles[i] = btsak_str2uint16(argv[i + 3]); - } - - /* Perform the IOCTL to start the read */ - - strncpy(btreq.btr_name, btsak->ifname, IFNAMSIZ); - - sockfd = btsak_socket(btsak); - if (sockfd >= 0) - { - ret = ioctl(sockfd, SIOCBTGATTRD, (unsigned long)((uintptr_t)&btreq)); - if (ret < 0) - { - fprintf(stderr, "ERROR: ioctl(SIOCBTGATTRD) failed: %d\n", - errno); - } - else - { - printf("Read pending...\n"); - } - - close(sockfd); - } -} - -/**************************************************************************** - * Name: btsak_cmd_gatt_read_get - * - * Description: - * gatt [-h] rget [-h] - * - ****************************************************************************/ - -void btsak_cmd_gatt_read_get(FAR struct btsak_s *btsak, int argc, - FAR char *argv[]) -{ - struct btreq_s btreq; - uint8_t data[HCI_GATTRD_DATA]; - int sockfd; - int ret; - int i; - int j; - - /* Check for help command */ - - if (argc == 2 && strcmp(argv[1], "-h") == 0) - { - btsak_gatt_showusage(btsak->progname, argv[0], EXIT_SUCCESS); - } - - if (argc != 1) - { - fprintf(stderr, "ERROR: No arguments expected\n"); - btsak_gatt_showusage(btsak->progname, argv[0], EXIT_FAILURE); - } - - /* Perform the IOCTL to start the discovery */ - - memset(&btreq, 0, sizeof(struct btreq_s)); - strncpy(btreq.btr_name, btsak->ifname, IFNAMSIZ); - btreq.btr_rdsize = HCI_GATTRD_DATA; - btreq.btr_rddata = data; - - sockfd = btsak_socket(btsak); - if (sockfd >= 0) - { - ret = ioctl(sockfd, SIOCBTGATTRDGET, (unsigned long)((uintptr_t)&btreq)); - if (ret < 0) - { - fprintf(stderr, "ERROR: ioctl(SIOCBTGATTRDGET) failed: %d\n", errno); - } - - /* Has the read completed? */ - - else if (btreq.btr_rdpending) - { - printf("Read pending. Data not yet available.\n"); - } - else - { - /* Show the results that we obtained */ - - printf("Read:\n"); - for (i = 0; i < btreq.btr_rdsize; i += 16) - { - for (j = 0; j < 16 && (i + j) < btreq.btr_rdsize; j++) - { - if (j == 8) - { - putchar(' '); - } - - printf(" %02x", data[i]); - } - - putchar('\n'); - } - } - - close(sockfd); - } + btsak_cmd_read_common(btsak, argc, argv, true); } /**************************************************************************** @@ -712,7 +535,7 @@ void btsak_cmd_gatt_write(FAR struct btsak_s *btsak, int argc, } btreq.btr_wrhandle = btsak_str2uint16(argv[3]); - btreq.btr_wrnbytes = argc - 3; + btreq.btr_wrnbytes = argc - 4; if (btreq.btr_wrnbytes > HCI_GATTWR_DATA) { @@ -723,7 +546,7 @@ void btsak_cmd_gatt_write(FAR struct btsak_s *btsak, int argc, for (i = 0; i < btreq.btr_wrnbytes; i++) { - btreq.btr_wrdata[i] = btsak_str2uint8(argv[i + 3]); + btreq.btr_wrdata[i] = btsak_str2uint8(argv[i + 4]); } /* Perform the IOCTL to start the read */ @@ -741,54 +564,8 @@ void btsak_cmd_gatt_write(FAR struct btsak_s *btsak, int argc, } else { - printf("Write pending...\n"); - } - - close(sockfd); - } -} - -/**************************************************************************** - * Name: btsak_cmd_gatt_write_get - * - * Description: - * gatt [-h] dget [-h] - * - ****************************************************************************/ - -void btsak_cmd_gatt_write_get(FAR struct btsak_s *btsak, int argc, - FAR char *argv[]) -{ - struct btreq_s btreq; - int sockfd; - int ret; - - /* Perform the IOCTL to recover the result of the write operation */ - - strncpy(btreq.btr_name, btsak->ifname, IFNAMSIZ); - - sockfd = btsak_socket(btsak); - if (sockfd >= 0) - { - ret = ioctl(sockfd, SIOCBTGATTWRGET, (unsigned long)((uintptr_t)&btreq)); - if (ret < 0) - { - fprintf(stderr, "ERROR: ioctl(SIOCBTGATTWRGET) failed: %d\n", - errno); - } - else - { - printf("Write Result:\n"); - if (btreq.btr_wrpending) - { - printf("\tState: Pending\n"); - printf("\tResult: Not yet available\n"); - } - else - { - printf("\tState: Complete\n"); - printf("\tResult: %u\n", btreq.btr_wrresult); - } + printf("Write %s\n", + btreq.btr_wrresult == 0 ? "succeeded" : "failed"); } close(sockfd); diff --git a/wireless/bluetooth/btsak/btsak_main.c b/wireless/bluetooth/btsak/btsak_main.c index ed4c4c4e3..e69b5aa35 100644 --- a/wireless/bluetooth/btsak/btsak_main.c +++ b/wireless/bluetooth/btsak/btsak_main.c @@ -122,11 +122,6 @@ static const struct btsak_command_s g_btsak_gatt_commands[] = (CODE void *)btsak_cmd_gatt_exchange_mtu, "[-h] public|private" }, - { - "mget", - (CODE void *)btsak_cmd_gatt_exchange_mtu_result, - "[-h]" - }, { "connect", (CODE void *)btsak_cmd_connect, @@ -152,11 +147,6 @@ static const struct btsak_command_s g_btsak_gatt_commands[] = (CODE void *)btsak_cmd_gatt_discover_descriptor, "[-h] public|private [ []]" }, - { - "dget", - (CODE void *)btsak_cmd_gatt_discover_get, - "[-h]" - }, { "read", (CODE void *)btsak_cmd_gatt_read, @@ -167,20 +157,10 @@ static const struct btsak_command_s g_btsak_gatt_commands[] = (CODE void *)btsak_cmd_gatt_read_multiple, "[-h] public|private [ []..]" }, - { - "rget", - (CODE void *)btsak_cmd_gatt_read_get, - "[-h]" - }, { "write", (CODE void *)btsak_cmd_gatt_write, "[-h] public|private [ []..]" - }, - { - "wget", - (CODE void *)btsak_cmd_gatt_write_get, - "[-h]" } };