From patchwork Thu Dec 15 21:10:33 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luiz Augusto von Dentz X-Patchwork-Id: 634261 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0D114C4332F for ; Thu, 15 Dec 2022 21:11:02 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229636AbiLOVK7 (ORCPT ); Thu, 15 Dec 2022 16:10:59 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51102 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229728AbiLOVKn (ORCPT ); Thu, 15 Dec 2022 16:10:43 -0500 Received: from mail-pf1-x42d.google.com (mail-pf1-x42d.google.com [IPv6:2607:f8b0:4864:20::42d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A946E101A for ; Thu, 15 Dec 2022 13:10:40 -0800 (PST) Received: by mail-pf1-x42d.google.com with SMTP id g1so471159pfk.2 for ; Thu, 15 Dec 2022 13:10:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:from:to:cc:subject:date:message-id:reply-to; bh=AKdbowsslj10qklst4fkV5gdI623N0h5RYQCxNRxPMs=; b=OLk1+OMxMjCAlgUjddRmmNV99WUrM3NdnC6gk5EJ6e+G/Gb8DVUzGtWq9cMQ6qqxzM xX7VOsraTKit6EHUSuoF1aJUMffaoERQIiBvhAiRtzHoifAyfGUOm+moD/hxIg4Gp0zU Wauc9tWkhXi7Q9IJnJ/IXU649hbqFrnTHDFyyTVWJyzWM52UtPP/Fvr8qfKbOwDsbpEW nWVP4TTDwkOdXk/jhsS8SAv5I/sGxQakvJ698Fy6NIiLgzKJik3xN+jg86+nAM9S0hP/ 3U3np2ciVQfI0lUIYnkOp0IRLrhaDYfGw0/9+SbhAK6o7A2bTcatLfaSxT45XTEzHrR5 APmw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=AKdbowsslj10qklst4fkV5gdI623N0h5RYQCxNRxPMs=; b=x/IB5+4P25o4sgqovtmqwPNwmLvtmsKGgJCboPOHZI34AXFP99hSEGnJkB2q1M5rmc YZGYILfb4Qj3Z2t5pQYcXt9bnI6buBjt7/pLxfyg6Y1DrLJ+tWqDzxkQt+SG9CQhA3Ld XM2JjYxMZFoZXhYJSOsebXsjw2Z1DO0TnZ+8u95cKyv7iIwTxFvMYfW3srMLq7Vr2YZc nD76VlgIJbpHD9nifZcs9pOVqyy8TUd37YBnxUu8GJqWLt5HZwQU5G8IGeaVJMIR6gvK sZ1AM+SpOSq7Dtw824grBW8kNsYIie3//RWuI6uik66JjLGU8Dew0dVwozeei6gfR1uY AZ/g== X-Gm-Message-State: ANoB5pkNmkhqXnsViV/jLnHNQRvMz58n7eRhmxWhDI50BWrp9PE5OFRt 0KEhw29MgaKDuIiV7vBfnxQq5VTqU7odtiRd X-Google-Smtp-Source: AA0mqf6h1y8EiNoY3eFKNjeiQIwWgwgWiTDPw1wYYmLZkCwuflRB8imw52M8rQuexXepNxNJ8WiwXQ== X-Received: by 2002:a05:6a00:1d1b:b0:57c:2ab7:2c0b with SMTP id a27-20020a056a001d1b00b0057c2ab72c0bmr12008028pfx.28.1671138639329; Thu, 15 Dec 2022 13:10:39 -0800 (PST) Received: from lvondent-mobl4.. (c-71-56-157-77.hsd1.or.comcast.net. [71.56.157.77]) by smtp.gmail.com with ESMTPSA id c20-20020aa79534000000b005779110635asm54908pfp.51.2022.12.15.13.10.38 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 15 Dec 2022 13:10:38 -0800 (PST) From: Luiz Augusto von Dentz To: linux-bluetooth@vger.kernel.org Subject: [PATCH BlueZ v2 1/5] client/player: Make transport.send non-blocking Date: Thu, 15 Dec 2022 13:10:33 -0800 Message-Id: <20221215211037.2686489-1-luiz.dentz@gmail.com> X-Mailer: git-send-email 2.37.3 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org From: Luiz Augusto von Dentz This makes transport.send command non-blocking by using timerfd callback to initiate the transfers. --- client/player.c | 205 ++++++++++++++++++++++++++++++++---------------- 1 file changed, 138 insertions(+), 67 deletions(-) diff --git a/client/player.c b/client/player.c index 8b3785d6b632..1f10387f89ad 100644 --- a/client/player.c +++ b/client/player.c @@ -24,6 +24,7 @@ #include #include #include +#include #include @@ -92,6 +93,7 @@ struct transport { int fd; struct io *io; uint32_t seq; + struct io *timer_io; }; static void endpoint_unregister(void *data) @@ -2959,6 +2961,8 @@ static void transport_close(struct transport *transport) return; close(transport->fd); + transport->fd = -1; + free(transport->filename); } @@ -2966,6 +2970,7 @@ static void transport_free(void *data) { struct transport *transport = data; + io_destroy(transport->timer_io); io_destroy(transport->io); free(transport); } @@ -3330,104 +3335,166 @@ static int open_file(const char *filename, int flags) return fd; } -#define NSEC_USEC(_t) (_t / 1000L) -#define SEC_USEC(_t) (_t * 1000000L) -#define TS_USEC(_ts) (SEC_USEC((_ts)->tv_sec) + NSEC_USEC((_ts)->tv_nsec)) - -static void send_wait(struct timespec *t_start, uint32_t us) +static int elapsed_time(bool reset, int *secs, int *nsecs) { - struct timespec t_now; - struct timespec t_diff; - int64_t delta_us; + static struct timespec start; + struct timespec curr; - /* Skip sleep at start */ - if (!us) - return; - - if (clock_gettime(CLOCK_MONOTONIC, &t_now) < 0) { - bt_shell_printf("clock_gettime: %s (%d)", strerror(errno), - errno); - return; + if (reset) { + if (clock_gettime(CLOCK_MONOTONIC, &start) < 0) { + bt_shell_printf("clock_gettime: %s (%d)", + strerror(errno), errno); + return -errno; + } } - t_diff.tv_sec = t_now.tv_sec - t_start->tv_sec; - if (t_start->tv_nsec > t_now.tv_nsec) { - t_diff.tv_sec--; - t_now.tv_nsec += 1000000000L; - } - t_diff.tv_nsec = t_now.tv_nsec - t_start->tv_nsec; - - delta_us = us - TS_USEC(&t_diff); - - if (delta_us < 0) { - bt_shell_printf("Send is behind: %" PRId64 " us - skip sleep", - delta_us); - delta_us = 1000; - } - - usleep(delta_us); - - if (clock_gettime(CLOCK_MONOTONIC, t_start) < 0) + if (clock_gettime(CLOCK_MONOTONIC, &curr) < 0) { bt_shell_printf("clock_gettime: %s (%d)", strerror(errno), - errno); -} - -static int transport_send(struct transport *transport, int fd, - struct bt_iso_qos *qos) -{ - struct timespec t_start; - uint8_t *buf; - uint32_t num = 0; - - if (qos && clock_gettime(CLOCK_MONOTONIC, &t_start) < 0) { - bt_shell_printf("clock_gettime: %s (%d)", strerror(errno), - errno); + errno); return -errno; } - buf = malloc(transport->mtu[1]); - if (!buf) { - bt_shell_printf("malloc: %s (%d)", strerror(errno), errno); - return -ENOMEM; + *secs = curr.tv_sec - start.tv_sec; + *nsecs = curr.tv_nsec - start.tv_nsec; + if (*nsecs < 0) { + (*secs)--; + *nsecs += 1000000000; } - /* num of packets = latency (ms) / interval (us) */ - if (qos) - num = (qos->out.latency * 1000 / qos->out.interval); + return 0; +} - for (transport->seq = 0; ; transport->seq++) { +static int transport_send_seq(struct transport *transport, int fd, uint32_t num) +{ + uint8_t *buf; + uint32_t i; + + if (!num) + return 0; + + buf = malloc(transport->mtu[1]); + if (!buf) + return -ENOMEM; + + for (i = 0; i < num; i++, transport->seq++) { ssize_t ret; int queued; + int secs = 0, nsecs = 0; ret = read(fd, buf, transport->mtu[1]); if (ret <= 0) { if (ret < 0) bt_shell_printf("read failed: %s (%d)", strerror(errno), errno); - close(fd); + free(buf); return ret; } ret = send(transport->sk, buf, ret, 0); if (ret <= 0) { - bt_shell_printf("Send failed: %s (%d)", + bt_shell_printf("send failed: %s (%d)", strerror(errno), errno); + free(buf); return -errno; } + elapsed_time(!transport->seq, &secs, &nsecs); + ioctl(transport->sk, TIOCOUTQ, &queued); - bt_shell_printf("[seq %d] send: %zd bytes " + bt_shell_printf("[seq %d %d.%03ds] send: %zd bytes " "(TIOCOUTQ %d bytes)\n", - transport->seq, ret, queued); - - if (qos) { - if (transport->seq && !((transport->seq + 1) % num)) - send_wait(&t_start, num * qos->out.interval); - } + transport->seq, secs, + (nsecs + 500000) / 1000000, + ret, queued); } free(buf); + + return i; +} + +static bool transport_timer_read(struct io *io, void *user_data) +{ + struct transport *transport = user_data; + struct bt_iso_qos qos; + socklen_t len; + int ret, fd; + uint32_t num; + uint64_t exp; + + if (transport->fd < 0) + return false; + + fd = io_get_fd(io); + ret = read(fd, &exp, sizeof(exp)); + if (ret < 0) { + bt_shell_printf("Failed to read: %s (%d)\n", strerror(errno), + -errno); + return false; + } + + /* Read QoS if available */ + memset(&qos, 0, sizeof(qos)); + len = sizeof(qos); + if (getsockopt(transport->sk, SOL_BLUETOOTH, BT_ISO_QOS, &qos, + &len) < 0) { + bt_shell_printf("Failed to getsockopt(BT_ISO_QOS): %s (%d)\n", + strerror(errno), -errno); + return false; + } + + /* num of packets = latency (ms) / interval (us) */ + num = (qos.out.latency * 1000 / qos.out.interval); + + ret = transport_send_seq(transport, transport->fd, num); + if (ret < 0) { + bt_shell_printf("Unable to send: %s (%d)\n", + strerror(-ret), ret); + return false; + } + + if (!ret) { + transport_close(transport); + return false; + } + + return true; +} + +static int transport_send(struct transport *transport, int fd, + struct bt_iso_qos *qos) +{ + struct itimerspec ts; + int timer_fd; + + transport->seq = 0; + + if (!qos) + return transport_send_seq(transport, fd, UINT32_MAX); + + if (transport->fd >= 0) + return -EALREADY; + + timer_fd = timerfd_create(CLOCK_MONOTONIC, 0); + if (timer_fd < 0) + return -errno; + + memset(&ts, 0, sizeof(ts)); + ts.it_value.tv_nsec = qos->out.latency * 1000000; + ts.it_interval.tv_nsec = qos->out.latency * 1000000; + + if (timerfd_settime(timer_fd, TFD_TIMER_ABSTIME, &ts, NULL) < 0) + return -errno; + + transport->fd = fd; + + transport->timer_io = io_new(timer_fd); + + io_set_read_handler(transport->timer_io, transport_timer_read, + transport, NULL); + + return transport_send_seq(transport, fd, 1); } static void cmd_send_transport(int argc, char *argv[]) @@ -3457,6 +3524,8 @@ static void cmd_send_transport(int argc, char *argv[]) } fd = open_file(argv[2], O_RDONLY); + if (fd < 0) + return bt_shell_noninteractive_quit(EXIT_FAILURE); bt_shell_printf("Sending ...\n"); @@ -3469,10 +3538,12 @@ static void cmd_send_transport(int argc, char *argv[]) else err = transport_send(transport, fd, &qos); - close(fd); - - if (err < 0) + if (err < 0) { + bt_shell_printf("Unable to send: %s (%d)", strerror(-err), + -err); + close(fd); return bt_shell_noninteractive_quit(EXIT_FAILURE); + } return bt_shell_noninteractive_quit(EXIT_SUCCESS); } From patchwork Thu Dec 15 21:10:34 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luiz Augusto von Dentz X-Patchwork-Id: 634886 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id D74CBC4167B for ; Thu, 15 Dec 2022 21:10:59 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229976AbiLOVK5 (ORCPT ); Thu, 15 Dec 2022 16:10:57 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51104 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229809AbiLOVKn (ORCPT ); Thu, 15 Dec 2022 16:10:43 -0500 Received: from mail-pf1-x435.google.com (mail-pf1-x435.google.com [IPv6:2607:f8b0:4864:20::435]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C21C410B6 for ; Thu, 15 Dec 2022 13:10:41 -0800 (PST) Received: by mail-pf1-x435.google.com with SMTP id 21so460717pfw.4 for ; Thu, 15 Dec 2022 13:10:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=dk4rLbDdNGWPnvC7kri4rqAgpOPPYTq/B4Hcvj14rhk=; b=UrVuo5UBwk3FFGlu8ZD0pBTckYfmCdK3nKDJ2XNw9Iwwry5gbzLcBzPZjXml0bbu6H lLoI39fbyLmh1owGVHUcUgDDrJ0luEO+75IAZudUUPb0Uo/gz8gYljs9gf8GN3oXod5R 8by8zBkmg8QQ4G0RHluW2kQUo/DfdokIiMW6g+LNorpromJd2SasRDDWgEhRWIacPK9y 2t4JNlAw/cl/qgYDeH25+csGv64OKB/Bb30FCXOkmQcCCSbcxCByjWlsyd37qo93dTVM ayn/49lvai7oUbiyFFBbLyP0j47K32A/+wdDN4Xp0xWptKJcu4408biKgoCEedMT0N/D gsGQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=dk4rLbDdNGWPnvC7kri4rqAgpOPPYTq/B4Hcvj14rhk=; b=kjGwCtzmsAdoPiM9KDkRLjpzWxaWMWp8vh/xVkZOxeYYosX3ItX51fm7Pxp5Un3Yh8 OfimmkkBSfRsR/22hmQky6mUSa2N76SEXvsmAkPpo/1IGRXu9AKVV+TH8otzLQlVIGal qdG6sDVgQMlClK65vpe+prITQ/tgUcBdidu3xaLNTXTsQYCMWqc83qHy7GW6gAs/xpUD Slrs4ye+CMEUMQssMP+S8UoswVqlbsm43lZcwvt3GDHuq2rICeN/Yr5AZnBIp5RBh+g1 YSXoVsgTywpank+/mZH3MWl1GNp/eDszXVwCuZohqP2xpzq6ZspGQz1EURjcFBSIq9sP Uvfg== X-Gm-Message-State: ANoB5plfdMrRp8+uR4xY5v+6sLloSqNYqsJmnUGryTvOU9gSoPADz4V6 ua3cx9FCQgcfNbJ0sbku5blVVM1GaCjOwFOa X-Google-Smtp-Source: AA0mqf4I+HV3orQLleTvbAjIM0TQk/N+/kjXcEbv6Z8AxfrxdSA2O83BR1mUb4fCpfcFEAYbmkjDPA== X-Received: by 2002:a05:6a00:1696:b0:566:94d0:8c96 with SMTP id k22-20020a056a00169600b0056694d08c96mr38971495pfc.26.1671138640775; Thu, 15 Dec 2022 13:10:40 -0800 (PST) Received: from lvondent-mobl4.. (c-71-56-157-77.hsd1.or.comcast.net. [71.56.157.77]) by smtp.gmail.com with ESMTPSA id c20-20020aa79534000000b005779110635asm54908pfp.51.2022.12.15.13.10.39 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 15 Dec 2022 13:10:40 -0800 (PST) From: Luiz Augusto von Dentz To: linux-bluetooth@vger.kernel.org Subject: [PATCH BlueZ v2 2/5] shared/shell: Add bt_shell_echo Date: Thu, 15 Dec 2022 13:10:34 -0800 Message-Id: <20221215211037.2686489-2-luiz.dentz@gmail.com> X-Mailer: git-send-email 2.37.3 In-Reply-To: <20221215211037.2686489-1-luiz.dentz@gmail.com> References: <20221215211037.2686489-1-luiz.dentz@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org From: Luiz Augusto von Dentz This adds bt_shell_echo which can be used to print messages on the echo area. --- src/shared/shell.c | 20 ++++++++++++++++++++ src/shared/shell.h | 2 ++ 2 files changed, 22 insertions(+) diff --git a/src/shared/shell.c b/src/shared/shell.c index 0639c786d983..3c0e61dbc414 100644 --- a/src/shared/shell.c +++ b/src/shared/shell.c @@ -576,6 +576,26 @@ void bt_shell_printf(const char *fmt, ...) } } +void bt_shell_echo(const char *fmt, ...) +{ + va_list args; + char *str; + int err; + + va_start(args, fmt); + err = vasprintf(&str, fmt, args); + if (!err) + err = asprintf(&str, COLOR_HIGHLIGHT "%s#" COLOR_OFF, str); + va_end(args); + + if (err) + return; + + rl_save_prompt(); + bt_shell_set_prompt(str); + rl_restore_prompt(); +} + static void print_string(const char *str, void *user_data) { bt_shell_printf("%s\n", str); diff --git a/src/shared/shell.h b/src/shared/shell.h index 8baa2854a250..87fb5c415f20 100644 --- a/src/shared/shell.h +++ b/src/shared/shell.h @@ -70,6 +70,8 @@ void bt_shell_set_prompt(const char *string); void bt_shell_printf(const char *fmt, ...) __attribute__((format(printf, 1, 2))); +void bt_shell_echo(const char *fmt, + ...) __attribute__((format(printf, 1, 2))); void bt_shell_hexdump(const unsigned char *buf, size_t len); void bt_shell_usage(void); From patchwork Thu Dec 15 21:10:35 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luiz Augusto von Dentz X-Patchwork-Id: 634885 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6C6C9C3DA78 for ; Thu, 15 Dec 2022 21:11:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229989AbiLOVLC (ORCPT ); Thu, 15 Dec 2022 16:11:02 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51220 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229926AbiLOVKp (ORCPT ); Thu, 15 Dec 2022 16:10:45 -0500 Received: from mail-pg1-x52c.google.com (mail-pg1-x52c.google.com [IPv6:2607:f8b0:4864:20::52c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5D1AC5F7C for ; Thu, 15 Dec 2022 13:10:43 -0800 (PST) Received: by mail-pg1-x52c.google.com with SMTP id f3so480408pgc.2 for ; Thu, 15 Dec 2022 13:10:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=pJsP1JYOTVWNXZaAAf4aqeAwsVljV5PglWKu2WbNtNs=; b=qksuDV5s70pIDOLQbuzta6KXUN0qfb4UgqAl/Yu+70iyHmVcjlbBoH+ef2rQ0ZkJda WX88pVJv2HaGS1o9mP4uhvTebN8rGoxhjP0+OgmdoASayHVEuln7+GBenU2kCN32c1wn RLQNjq/KtHaN1yEL4zpzQjLM9EtA26p7yVDGCghZHaq8xPixZnBlNw61BNwTjFg+IyIV PzCBxV4G3FLVOnpEadHnHklLlf3CDIWKaXlAfFarLsw0OtO4vkPeD0wUySOFowWN94JP X8U1B/5Kxxa25tPjCFVWKgdmdZurkRxc8Nk/zy+YPC57NUNPEmn7EBhF8nRc3HnIYM4h X+6w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=pJsP1JYOTVWNXZaAAf4aqeAwsVljV5PglWKu2WbNtNs=; b=0hhu06FUo/OolriC2zGzQzhXgKNCTrsuc+pYfyS5EhUqk8qaQbQE+HQZroAJUL/33x gwAypXbowjccHH+p25aPJKpR1QZtgH6SY1qYnBOpNVnheYs9xoaiGr7Lkos4tvLeYzEq LvjKt5dKukGxkC+ap2E56J2I9b5Us2Oz8rmrzhJz/WDB1M08CKAsGBbyhpmf7kv3OAXs vStXLJBHgwAmug4p7YuZ4Wosco4NsU+AWvS9Fk0SqRd8vYo1uSo1UF6HPbN5lyEsE71d K86GADEaqw7CPsS69P1hdLP592IeNPB9NjJlHqFGlHpJ8j1F6jkCQtgMztaxfQ9T85A/ GmsQ== X-Gm-Message-State: ANoB5pmY2va9F47iRS2+EVmYCj6zneouWUvXlqKrak7bAOvO1ASLuoFV /KkUg6F0s4FF8uhqKFss+bo0w6hoE7z+EVQ4 X-Google-Smtp-Source: AA0mqf6q7cT5ihSQRsZzLmuRFvLGeIDXHiYxBsqJSC4yI6ofQmsjNsF4lMABwvbHcbJAp2t7VSupBg== X-Received: by 2002:a05:6a00:796:b0:577:3523:bd23 with SMTP id g22-20020a056a00079600b005773523bd23mr30721586pfu.27.1671138642218; Thu, 15 Dec 2022 13:10:42 -0800 (PST) Received: from lvondent-mobl4.. (c-71-56-157-77.hsd1.or.comcast.net. [71.56.157.77]) by smtp.gmail.com with ESMTPSA id c20-20020aa79534000000b005779110635asm54908pfp.51.2022.12.15.13.10.40 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 15 Dec 2022 13:10:41 -0800 (PST) From: Luiz Augusto von Dentz To: linux-bluetooth@vger.kernel.org Subject: [PATCH BlueZ v2 3/5] client/player: Use bt_shell_echo to print transfer progress Date: Thu, 15 Dec 2022 13:10:35 -0800 Message-Id: <20221215211037.2686489-3-luiz.dentz@gmail.com> X-Mailer: git-send-email 2.37.3 In-Reply-To: <20221215211037.2686489-1-luiz.dentz@gmail.com> References: <20221215211037.2686489-1-luiz.dentz@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org From: Luiz Augusto von Dentz This uses bt_shell_echo to print transfer progress. --- client/player.c | 12 ++++-------- src/shared/shell.c | 10 +++++----- 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/client/player.c b/client/player.c index 1f10387f89ad..e73ed6ac925a 100644 --- a/client/player.c +++ b/client/player.c @@ -3000,11 +3000,11 @@ static bool transport_recv(struct io *io, void *user_data) return true; } - bt_shell_printf("[seq %d] recv: %u bytes\n", transport->seq, ret); + bt_shell_echo("[seq %d] recv: %u bytes", transport->seq, ret); transport->seq++; - if (transport->fd) { + if (transport->fd >= 0) { len = write(transport->fd, buf, ret); if (len < 0) bt_shell_printf("Unable to write: %s (%d)", @@ -3378,7 +3378,6 @@ static int transport_send_seq(struct transport *transport, int fd, uint32_t num) for (i = 0; i < num; i++, transport->seq++) { ssize_t ret; - int queued; int secs = 0, nsecs = 0; ret = read(fd, buf, transport->mtu[1]); @@ -3400,13 +3399,10 @@ static int transport_send_seq(struct transport *transport, int fd, uint32_t num) elapsed_time(!transport->seq, &secs, &nsecs); - ioctl(transport->sk, TIOCOUTQ, &queued); - - bt_shell_printf("[seq %d %d.%03ds] send: %zd bytes " - "(TIOCOUTQ %d bytes)\n", + bt_shell_echo("[seq %d %d.%03ds] send: %zd bytes ", transport->seq, secs, (nsecs + 500000) / 1000000, - ret, queued); + ret); } free(buf); diff --git a/src/shared/shell.c b/src/shared/shell.c index 3c0e61dbc414..3358b383e9e4 100644 --- a/src/shared/shell.c +++ b/src/shared/shell.c @@ -580,15 +580,15 @@ void bt_shell_echo(const char *fmt, ...) { va_list args; char *str; - int err; + int ret; va_start(args, fmt); - err = vasprintf(&str, fmt, args); - if (!err) - err = asprintf(&str, COLOR_HIGHLIGHT "%s#" COLOR_OFF, str); + ret = vasprintf(&str, fmt, args); + if (ret >= 0) + ret = asprintf(&str, COLOR_HIGHLIGHT "%s " COLOR_OFF "#", str); va_end(args); - if (err) + if (ret < 0) return; rl_save_prompt(); From patchwork Thu Dec 15 21:10:36 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luiz Augusto von Dentz X-Patchwork-Id: 634260 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id E51E0C4332F for ; Thu, 15 Dec 2022 21:11:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230001AbiLOVLF (ORCPT ); Thu, 15 Dec 2022 16:11:05 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51222 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229959AbiLOVKp (ORCPT ); Thu, 15 Dec 2022 16:10:45 -0500 Received: from mail-pf1-x42d.google.com (mail-pf1-x42d.google.com [IPv6:2607:f8b0:4864:20::42d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7F8D6101A for ; Thu, 15 Dec 2022 13:10:44 -0800 (PST) Received: by mail-pf1-x42d.google.com with SMTP id d82so434643pfd.11 for ; Thu, 15 Dec 2022 13:10:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=68vaj7UUjIk/YKVH/9G5WtLzbSv+dwXmG0Wr1zSKcU8=; b=EYzfADYI2RDDn/mAWyJrVfNMg5Z2bpjh9D8FBVzuPm4c4MrpnCYehoYzMFhqICvuF1 /auFW4IiG3ddmHesXnnANq6yikmfX+nJc17r9/zHFBeF2q50N+gdqKEjZRfaY9mqMIxV T8bAT2HOV+kDqsu6TBGt63b9ZyRYTxkrdv8Suy39on1yhwrCJZ35YOGscbPbmfPkomC5 vY8gAkUzj1W1PLC94f8aTGN8cHJhr/ZhBPHVSAErdtuiiiqAe/PkSU9IoNvxYfcUnRjT OhVmM6Mq6YkE/FrWWzwOFKYtcI0lF4B/alpVyP3hQSKWw6a8Lu0xkixhLtbLI2IX4SgX agIQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=68vaj7UUjIk/YKVH/9G5WtLzbSv+dwXmG0Wr1zSKcU8=; b=HJO/iORyZOquxcFMCQu4xKrJ0vW4mDDzz6jYZjmSIXN49PmfL6pi/xZ/x/yQpt6AaI BZYU/Y2ZF9zDEryJI5DxUihtOVPOB17Gy6qrLNOL+mCnDIBEeYjmIYuLCt2WAaRhqAIQ oCwFrYhavlTWyDI5UdIqY+09m+lj+FNUdtdbGGeXthlNbugoC5HPAQvw7G2ESUZ8Dc28 l/qGObq1vxvk3VbELWebUcjM0SsABQDoTZw8QcHvKJUMP3xE7sxGLMW4hdAgfPvulJGB u9kesoYsehEK/76d67etPpwSniE1O/HvW8E+3l0jFg67/gnq/eKnbQp0fYk78Kq/oQQ0 ACvQ== X-Gm-Message-State: ANoB5pm79jGUUMc5CGq3mhAQ0BWUo7ytzKi8CLTvAe+ycPpF3OHnZJ1B py7tnb4hnxKRixtt9StzDjaHI3IzeKvc1yjV X-Google-Smtp-Source: AA0mqf5m0lz6TZWmkwX9dHxfxJTz2Wqr/JG6AFKYl+TwfySZ/JLuDyIsrMqP/cSSE1v3DsyamUI7Iw== X-Received: by 2002:a05:6a00:d4f:b0:569:a128:674 with SMTP id n15-20020a056a000d4f00b00569a1280674mr27025195pfv.33.1671138643442; Thu, 15 Dec 2022 13:10:43 -0800 (PST) Received: from lvondent-mobl4.. (c-71-56-157-77.hsd1.or.comcast.net. [71.56.157.77]) by smtp.gmail.com with ESMTPSA id c20-20020aa79534000000b005779110635asm54908pfp.51.2022.12.15.13.10.42 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 15 Dec 2022 13:10:42 -0800 (PST) From: Luiz Augusto von Dentz To: linux-bluetooth@vger.kernel.org Subject: [PATCH BlueZ v2 4/5] client/player: Print transport progress Date: Thu, 15 Dec 2022 13:10:36 -0800 Message-Id: <20221215211037.2686489-4-luiz.dentz@gmail.com> X-Mailer: git-send-email 2.37.3 In-Reply-To: <20221215211037.2686489-1-luiz.dentz@gmail.com> References: <20221215211037.2686489-1-luiz.dentz@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org From: Luiz Augusto von Dentz This uses bt_shell_echo to print out the transfer progress on the echo area. --- client/player.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/client/player.c b/client/player.c index e73ed6ac925a..6e33274d320d 100644 --- a/client/player.c +++ b/client/player.c @@ -25,6 +25,7 @@ #include #include #include +#include #include @@ -91,6 +92,7 @@ struct transport { uint16_t mtu[2]; char *filename; int fd; + struct stat stat; struct io *io; uint32_t seq; struct io *timer_io; @@ -3379,6 +3381,7 @@ static int transport_send_seq(struct transport *transport, int fd, uint32_t num) for (i = 0; i < num; i++, transport->seq++) { ssize_t ret; int secs = 0, nsecs = 0; + off_t offset; ret = read(fd, buf, transport->mtu[1]); if (ret <= 0) { @@ -3399,10 +3402,19 @@ static int transport_send_seq(struct transport *transport, int fd, uint32_t num) elapsed_time(!transport->seq, &secs, &nsecs); - bt_shell_echo("[seq %d %d.%03ds] send: %zd bytes ", + if (!transport->seq && fstat(fd, &transport->stat) < 0) { + bt_shell_printf("fstat failed: %s (%d)", + strerror(errno), errno); + free(buf); + return -errno; + } + + offset = lseek(fd, 0, SEEK_CUR); + + bt_shell_echo("[seq %d %d.%03ds] send: %zd/%zd bytes", transport->seq, secs, (nsecs + 500000) / 1000000, - ret); + offset, transport->stat.st_size); } free(buf); From patchwork Thu Dec 15 21:10:37 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luiz Augusto von Dentz X-Patchwork-Id: 634884 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 67B52C10F1E for ; Thu, 15 Dec 2022 21:11:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229974AbiLOVLJ (ORCPT ); Thu, 15 Dec 2022 16:11:09 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51268 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229972AbiLOVKr (ORCPT ); Thu, 15 Dec 2022 16:10:47 -0500 Received: from mail-pg1-x530.google.com (mail-pg1-x530.google.com [IPv6:2607:f8b0:4864:20::530]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DDB98FD06 for ; Thu, 15 Dec 2022 13:10:45 -0800 (PST) Received: by mail-pg1-x530.google.com with SMTP id 79so444153pgf.11 for ; Thu, 15 Dec 2022 13:10:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=C3ZpecbXZ7MA8B74RHhsu6KPOaD9oS4NsyjOCiHMjQo=; b=S+DorWfj6MGaIHeoeSn13MVS8+Gw2wMdHyj/LQy4moZeMm39Gklokaw+NdMDKGCt6M GEjxFhf6aBCgQaqoM6nGU3jp3jWj1jxXOnidwDKvBH5yQmpuoh3/zslWjCtAxrWSlFt8 Hkir2IucDYi7K+kmJD+/qw9zEfFSXYtXFbNRtCDzg1m4Gdmw1dKT2DFtrYFrSaJjHUnr hZTutCfGntiLHe2gFhfMnt6zjXUmKfQRiB+SJflHeQpwvPQl9vT7kYPiUiHA3zYYlmCp 5sl/VL4sB4vfA+nYwTgD4Ymw+HLXPwGjtW+ArqG7QbXJ3+mwkYRDZlbbtKcSApyn5U6q B3fQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=C3ZpecbXZ7MA8B74RHhsu6KPOaD9oS4NsyjOCiHMjQo=; b=E8LBOvBHIlRqEZKo6N6EeOmd/KgI5YlM531ERfouWKQd4cBu51oSQaMLtd0x08QO4E TmvyQGtqFv+3O0RTRY+XyWVPDvJgLFFSIb2w8eTGcOnQH0xox9z8tysl2E36UI6JWOXw J3aQhutFhyasDiV74RVLrrtjtTNQe8gZJqxAj3sSsx7JN7AaKUAIR7RVUxKKM0e8p/MQ cE8jyJnADfk+WdAoFpMyFdLca//nhydUm8FDST3DuqXzMO4G2cyKBDhttfc5MtfG7Z3h sVLEgqZWCJ3cREjRvFsEvFGgv8YnW/kjq1/IMvaTX62xjc+7LL+7ZeXnf6ezwA1WSzUe SI1w== X-Gm-Message-State: ANoB5pnKWe3c/tx8CDbsJaSzbjzbqxbhhFPb+QNysj9CpCYrPmh27tV3 wbQ3DRB1GYQesaJfXtTN/iD/EeGpjQR82VFY X-Google-Smtp-Source: AA0mqf4lDAUS5VCtmJg+tNIUsoN4AABgd+x41oUkRjstyl5Mk/9eaKYEQYNkb37CWphmb69Wsx0GRQ== X-Received: by 2002:a62:e519:0:b0:575:bf29:d1e0 with SMTP id n25-20020a62e519000000b00575bf29d1e0mr31749258pff.26.1671138644763; Thu, 15 Dec 2022 13:10:44 -0800 (PST) Received: from lvondent-mobl4.. (c-71-56-157-77.hsd1.or.comcast.net. [71.56.157.77]) by smtp.gmail.com with ESMTPSA id c20-20020aa79534000000b005779110635asm54908pfp.51.2022.12.15.13.10.43 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 15 Dec 2022 13:10:44 -0800 (PST) From: Luiz Augusto von Dentz To: linux-bluetooth@vger.kernel.org Subject: [PATCH BlueZ v2 5/5] client/player: Fix transport.send/receice tab completion Date: Thu, 15 Dec 2022 13:10:37 -0800 Message-Id: <20221215211037.2686489-5-luiz.dentz@gmail.com> X-Mailer: git-send-email 2.37.3 In-Reply-To: <20221215211037.2686489-1-luiz.dentz@gmail.com> References: <20221215211037.2686489-1-luiz.dentz@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org From: Luiz Augusto von Dentz Commands transport.send/receive were not settings any completion callback so this makes sure it uses transport_generator to generate the list of transport that could be used to send. --- client/player.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/client/player.c b/client/player.c index 6e33274d320d..eba233329276 100644 --- a/client/player.c +++ b/client/player.c @@ -3654,9 +3654,11 @@ static const struct bt_shell_menu transport_menu = { "Release Transport", transport_generator }, { "send", " ", cmd_send_transport, - "Send contents of a file" }, + "Send contents of a file", + transport_generator }, { "receive", " [filename]", cmd_receive_transport, - "Get/Set file to receive" }, + "Get/Set file to receive", + transport_generator }, { "volume", " [value]", cmd_volume_transport, "Get/Set transport volume", transport_generator },