You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by ja...@apache.org on 2023/09/25 09:08:43 UTC
[mynewt-nimble] branch master updated (57cdc5c1 -> 61e724ab)
This is an automated email from the ASF dual-hosted git repository.
janc pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-nimble.git
from 57cdc5c1 nimble/host: Add optional GAP event for unhandled HCI events
new a161f0ab apps/btshell: Convert to parse_arg module
new 61e724ab apps/dtm: Port to parse_arg module
The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
apps/btshell/pkg.yml | 1 +
apps/btshell/src/cmd.c | 122 ++++-----
apps/btshell/src/cmd.h | 37 +--
apps/btshell/src/cmd_gatt.c | 30 +--
apps/btshell/src/cmd_l2cap.c | 14 +-
apps/btshell/src/parse.c | 624 -------------------------------------------
apps/dtm/pkg.yml | 1 +
apps/dtm/src/main.c | 16 +-
apps/dtm/src/parse.c | 529 ------------------------------------
apps/dtm/src/parse.h | 58 ----
10 files changed, 95 insertions(+), 1337 deletions(-)
delete mode 100644 apps/dtm/src/parse.c
delete mode 100644 apps/dtm/src/parse.h
[mynewt-nimble] 01/02: apps/btshell: Convert to parse_arg module
Posted by ja...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
janc pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-nimble.git
commit a161f0abcdcb6a669d395c4a58be12976de0c126
Author: Szymon Janc <sz...@codecoup.pl>
AuthorDate: Thu Jul 20 15:27:48 2023 +0200
apps/btshell: Convert to parse_arg module
Mkae use of common argument parsing code.
---
apps/btshell/pkg.yml | 1 +
apps/btshell/src/cmd.c | 122 ++++-----
apps/btshell/src/cmd.h | 40 +--
apps/btshell/src/cmd_gatt.c | 30 +--
apps/btshell/src/cmd_l2cap.c | 14 +-
apps/btshell/src/parse.c | 624 -------------------------------------------
6 files changed, 89 insertions(+), 742 deletions(-)
diff --git a/apps/btshell/pkg.yml b/apps/btshell/pkg.yml
index b50b371c..d98f541f 100644
--- a/apps/btshell/pkg.yml
+++ b/apps/btshell/pkg.yml
@@ -29,6 +29,7 @@ pkg.deps:
- "@apache-mynewt-core/sys/stats"
- "@apache-mynewt-core/sys/console"
- "@apache-mynewt-core/sys/shell"
+ - "@apache-mynewt-core/util/parse_arg"
- nimble/host
- nimble/host/services/gap
- nimble/host/services/gatt
diff --git a/apps/btshell/src/cmd.c b/apps/btshell/src/cmd.c
index 22819219..e0fc57ac 100644
--- a/apps/btshell/src/cmd.c
+++ b/apps/btshell/src/cmd.c
@@ -69,7 +69,7 @@ cmd_parse_conn_start_end(uint16_t *out_conn, uint16_t *out_start,
return 0;
}
-static const struct kv_pair cmd_own_addr_types[] = {
+static const struct parse_arg_kv_pair cmd_own_addr_types[] = {
{ "public", BLE_OWN_ADDR_PUBLIC },
{ "random", BLE_OWN_ADDR_RANDOM },
{ "rpa_pub", BLE_OWN_ADDR_RPA_PUBLIC_DEFAULT },
@@ -77,7 +77,7 @@ static const struct kv_pair cmd_own_addr_types[] = {
{ NULL }
};
-static const struct kv_pair cmd_peer_addr_types[] = {
+static const struct parse_arg_kv_pair cmd_peer_addr_types[] = {
{ "public", BLE_ADDR_PUBLIC },
{ "random", BLE_ADDR_RANDOM },
{ "public_id", BLE_ADDR_PUBLIC_ID },
@@ -85,7 +85,7 @@ static const struct kv_pair cmd_peer_addr_types[] = {
{ NULL }
};
-static const struct kv_pair cmd_addr_type[] = {
+static const struct parse_arg_kv_pair cmd_addr_type[] = {
{ "public", BLE_ADDR_PUBLIC },
{ "random", BLE_ADDR_RANDOM },
{ NULL }
@@ -93,7 +93,7 @@ static const struct kv_pair cmd_addr_type[] = {
static int
-parse_dev_addr(const char *prefix, const struct kv_pair *addr_types,
+parse_dev_addr(const char *prefix, const struct parse_arg_kv_pair *addr_types,
ble_addr_t *addr)
{
char name[32];
@@ -115,7 +115,7 @@ parse_dev_addr(const char *prefix, const struct kv_pair *addr_types,
}
written += rc;
- rc = parse_arg_addr(name, addr);
+ rc = parse_arg_ble_addr(name, addr);
if (rc == ENOENT) {
/* not found */
return rc;
@@ -153,7 +153,7 @@ parse_dev_addr(const char *prefix, const struct kv_pair *addr_types,
/*****************************************************************************
* $advertise *
*****************************************************************************/
-static const struct kv_pair cmd_adv_filt_types[] = {
+static const struct parse_arg_kv_pair cmd_adv_filt_types[] = {
{ "none", BLE_HCI_ADV_FILT_NONE },
{ "scan", BLE_HCI_ADV_FILT_SCAN },
{ "conn", BLE_HCI_ADV_FILT_CONN },
@@ -162,7 +162,7 @@ static const struct kv_pair cmd_adv_filt_types[] = {
};
#if MYNEWT_VAL(BLE_EXT_ADV)
-static struct kv_pair cmd_ext_adv_phy_opts[] = {
+static struct parse_arg_kv_pair cmd_ext_adv_phy_opts[] = {
{ "1M", 0x01 },
{ "2M", 0x02 },
{ "coded", 0x03 },
@@ -177,7 +177,7 @@ cmd_advertise_configure(int argc, char **argv)
uint8_t instance;
int rc;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -338,7 +338,7 @@ cmd_advertise_set_addr(int argc, char **argv)
uint8_t instance;
int rc;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -349,7 +349,7 @@ cmd_advertise_set_addr(int argc, char **argv)
return rc;
}
- rc = parse_arg_mac("addr", addr.val);
+ rc = parse_arg_mac_addr("addr", addr.val);
if (rc != 0) {
console_printf("invalid 'addr' parameter\n");
return rc;
@@ -375,7 +375,7 @@ cmd_advertise_start(int argc, char **argv)
bool restart;
int rc;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -419,7 +419,7 @@ cmd_advertise_stop(int argc, char **argv)
uint8_t instance;
int rc;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -445,7 +445,7 @@ cmd_advertise_remove(int argc, char **argv)
uint8_t instance;
int rc;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -546,14 +546,14 @@ static const struct shell_cmd_help advertise_remove_help = {
#endif
#else
-static const struct kv_pair cmd_adv_conn_modes[] = {
+static const struct parse_arg_kv_pair cmd_adv_conn_modes[] = {
{ "non", BLE_GAP_CONN_MODE_NON },
{ "und", BLE_GAP_CONN_MODE_UND },
{ "dir", BLE_GAP_CONN_MODE_DIR },
{ NULL }
};
-static const struct kv_pair cmd_adv_disc_modes[] = {
+static const struct parse_arg_kv_pair cmd_adv_disc_modes[] = {
{ "non", BLE_GAP_DISC_MODE_NON },
{ "ltd", BLE_GAP_DISC_MODE_LTD },
{ "gen", BLE_GAP_DISC_MODE_GEN },
@@ -571,7 +571,7 @@ cmd_advertise(int argc, char **argv)
bool restart;
int rc;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -699,7 +699,7 @@ static const struct shell_cmd_help advertise_help = {
* $connect *
*****************************************************************************/
-static struct kv_pair cmd_ext_conn_phy_opts[] = {
+static struct parse_arg_kv_pair cmd_ext_conn_phy_opts[] = {
{ "none", 0x00 },
{ "1M", 0x01 },
{ "coded", 0x02 },
@@ -721,7 +721,7 @@ cmd_connect(int argc, char **argv)
int own_addr_type;
int rc;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -1014,7 +1014,7 @@ cmd_disconnect(int argc, char **argv)
uint8_t reason;
int rc;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -1117,7 +1117,7 @@ cmd_set_scan_opts(int argc, char **argv)
char *name_filter;
int rc;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -1173,7 +1173,7 @@ static const struct shell_cmd_help set_scan_opts_help = {
* $scan *
*****************************************************************************/
-static const struct kv_pair cmd_scan_filt_policies[] = {
+static const struct parse_arg_kv_pair cmd_scan_filt_policies[] = {
{ "no_wl", BLE_HCI_SCAN_FILT_NO_WL },
{ "use_wl", BLE_HCI_SCAN_FILT_USE_WL },
{ "no_wl_inita", BLE_HCI_SCAN_FILT_NO_WL_INITA },
@@ -1181,7 +1181,7 @@ static const struct kv_pair cmd_scan_filt_policies[] = {
{ NULL }
};
-static struct kv_pair cmd_scan_ext_types[] = {
+static struct parse_arg_kv_pair cmd_scan_ext_types[] = {
{ "none", 0x00 },
{ "1M", 0x01 },
{ "coded", 0x02 },
@@ -1204,7 +1204,7 @@ cmd_scan(int argc, char **argv)
uint16_t period;
int rc;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -1428,7 +1428,7 @@ cmd_set(int argc, char **argv)
int good = 0;
int rc;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -1544,11 +1544,11 @@ cmd_set_adv_data_or_scan_rsp(int argc, char **argv, bool scan_rsp,
int8_t eddystone_measured_power = 0;
char eddystone_url_body[BLE_EDDYSTONE_URL_MAX_LEN];
char *eddystone_url_full;
- int svc_data_uuid16_len;
- int svc_data_uuid32_len;
- int svc_data_uuid128_len;
- int uri_len;
- int mfg_data_len;
+ unsigned int svc_data_uuid16_len;
+ unsigned int svc_data_uuid32_len;
+ unsigned int svc_data_uuid128_len;
+ unsigned int uri_len;
+ unsigned int mfg_data_len;
int tmp;
int rc;
#if MYNEWT_VAL(BLE_EXT_ADV)
@@ -1566,7 +1566,7 @@ cmd_set_adv_data_or_scan_rsp(int argc, char **argv, bool scan_rsp,
memset(&adv_fields, 0, sizeof adv_fields);
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -1753,9 +1753,9 @@ cmd_set_adv_data_or_scan_rsp(int argc, char **argv, bool scan_rsp,
return rc;
}
- rc = parse_arg_byte_stream("service_data_uuid128",
+ rc = parse_arg_byte_stream_custom("service_data_uuid128", ":-",
CMD_ADV_DATA_SVC_DATA_UUID128_MAX_LEN,
- svc_data_uuid128, &svc_data_uuid128_len);
+ svc_data_uuid128, 0, &svc_data_uuid128_len);
if (rc == 0) {
adv_fields.svc_data_uuid128 = svc_data_uuid128;
adv_fields.svc_data_uuid128_len = svc_data_uuid128_len;
@@ -1932,7 +1932,7 @@ cmd_set_priv_mode(int argc, char **argv)
uint8_t priv_mode;
int rc;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -1980,7 +1980,7 @@ cmd_white_list(int argc, char **argv)
int addrs_cnt;
int rc;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -2036,7 +2036,7 @@ cmd_conn_rssi(int argc, char **argv)
int8_t rssi;
int rc;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -2082,7 +2082,7 @@ cmd_conn_update_params(int argc, char **argv)
uint16_t conn_handle;
int rc;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -2176,7 +2176,7 @@ cmd_conn_datalen(int argc, char **argv)
uint16_t tx_time;
int rc;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -2229,7 +2229,7 @@ static const struct shell_cmd_help conn_datalen_help = {
* keystore *
*****************************************************************************/
-static const struct kv_pair cmd_keystore_entry_type[] = {
+static const struct parse_arg_kv_pair cmd_keystore_entry_type[] = {
{ "msec", BLE_STORE_OBJ_TYPE_PEER_SEC },
{ "ssec", BLE_STORE_OBJ_TYPE_OUR_SEC },
{ "cccd", BLE_STORE_OBJ_TYPE_CCCD },
@@ -2327,7 +2327,7 @@ cmd_keystore_add(int argc, char **argv)
int obj_type;
int rc;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -2391,7 +2391,7 @@ cmd_keystore_del(int argc, char **argv)
int obj_type;
int rc;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -2480,7 +2480,7 @@ cmd_keystore_show(int argc, char **argv)
int type;
int rc;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -2546,7 +2546,7 @@ cmd_auth_passkey(int argc, char **argv)
char *yesno;
int rc;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -2666,7 +2666,7 @@ cmd_security_pair(int argc, char **argv)
uint16_t conn_handle;
int rc;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -2710,7 +2710,7 @@ cmd_security_unpair(int argc, char **argv)
int rc;
int oldest;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -2767,7 +2767,7 @@ cmd_security_start(int argc, char **argv)
uint16_t conn_handle;
int rc;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -2815,7 +2815,7 @@ cmd_security_encryption(int argc, char **argv)
int rc;
int auth;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -2896,7 +2896,7 @@ cmd_security_set_data(int argc, char **argv)
good = 0;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -3010,7 +3010,7 @@ cmd_test_tx(int argc, char **argv)
uint16_t num;
uint8_t stop;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -3087,7 +3087,7 @@ cmd_phy_set(int argc, char **argv)
uint16_t phy_opts;
int rc;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -3147,7 +3147,7 @@ cmd_phy_set_default(int argc, char **argv)
uint8_t rx_phys_mask;
int rc;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -3193,7 +3193,7 @@ cmd_phy_read(int argc, char **argv)
uint8_t rx_phy;
int rc;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -3634,7 +3634,7 @@ cmd_periodic_configure(int argc, char **argv)
uint8_t instance;
int rc;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -3690,7 +3690,7 @@ cmd_periodic_start(int argc, char **argv)
uint8_t instance;
int rc;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -3716,7 +3716,7 @@ cmd_periodic_stop(int argc, char **argv)
uint8_t instance;
int rc;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -3783,7 +3783,7 @@ cmd_sync_create(int argc, char **argv)
uint8_t sid;
int rc;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -3868,7 +3868,7 @@ cmd_sync_transfer(int argc, char **argv)
uint16_t sync_handle;
int rc;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -3907,7 +3907,7 @@ cmd_sync_reporting(int argc, char **argv)
bool enable;
int rc;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -3968,7 +3968,7 @@ cmd_sync_transfer_set_info(int argc, char **argv)
uint8_t instance;
int rc;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -4023,7 +4023,7 @@ cmd_sync_transfer_receive(int argc, char **argv)
bool disable;
int rc;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -4100,7 +4100,7 @@ cmd_sync_terminate(int argc, char **argv)
uint16_t sync_handle;
int rc;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -4138,7 +4138,7 @@ cmd_sync_stats(int argc, char **argv)
uint16_t sync_handle;
int rc;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
diff --git a/apps/btshell/src/cmd.h b/apps/btshell/src/cmd.h
index 63bd50d1..0984d009 100644
--- a/apps/btshell/src/cmd.h
+++ b/apps/btshell/src/cmd.h
@@ -22,44 +22,14 @@
#include <inttypes.h>
#include "host/ble_uuid.h"
+#include <parse_arg/parse_arg.h>
-struct kv_pair {
- char *key;
- int val;
-};
-
-uint32_t parse_arg_time_dflt(char *name, int step, uint32_t dflt, int *out_status);
-const struct kv_pair *parse_kv_find(const struct kv_pair *kvs, char *name);
-int parse_arg_find_idx(const char *key);
-char *parse_arg_extract(const char *key);
-long parse_arg_long_bounds(char *name, long min, long max, int *out_status);
-long parse_arg_long_bounds_dflt(char *name, long min, long max,
- long dflt, int *out_status);
-uint64_t parse_arg_uint64_bounds(char *name, uint64_t min,
- uint64_t max, int *out_status);
-long parse_arg_long(char *name, int *staus);
-uint8_t parse_arg_bool(char *name, int *status);
-uint8_t parse_arg_bool_dflt(char *name, uint8_t dflt, int *out_status);
-uint8_t parse_arg_uint8(char *name, int *status);
-uint8_t parse_arg_uint8_dflt(char *name, uint8_t dflt, int *out_status);
-uint16_t parse_arg_uint16(char *name, int *status);
-uint16_t parse_arg_uint16_dflt(char *name, uint16_t dflt, int *out_status);
-uint32_t parse_arg_uint32(char *name, int *out_status);
-uint32_t parse_arg_uint32_dflt(char *name, uint32_t dflt, int *out_status);
-uint64_t parse_arg_uint64(char *name, int *out_status);
-int parse_arg_kv(char *name, const struct kv_pair *kvs, int *out_status);
-int parse_arg_kv_dflt(char *name, const struct kv_pair *kvs, int def_val,
- int *out_status);
-int parse_arg_byte_stream(char *name, int max_len, uint8_t *dst, int *out_len);
-int parse_arg_uint8_list_with_separator(char *name, char *separator, int max_len,
- uint8_t *dst, int *out_len);
-int parse_arg_byte_stream_exact_length(char *name, uint8_t *dst, int len);
-int parse_arg_mac(char *name, uint8_t *dst);
-int parse_arg_addr(char *name, ble_addr_t *addr);
-int parse_arg_uuid(char *name, ble_uuid_any_t *uuid);
-int parse_arg_all(int argc, char **argv);
+//int parse_arg_mac(char *name, uint8_t *dst);
+//int parse_arg_addr(char *name, ble_addr_t *addr);
+//int parse_arg_uuid(char *name, ble_uuid_any_t *uuid);
int parse_eddystone_url(char *full_url, uint8_t *out_scheme, char *out_body,
uint8_t *out_body_len, uint8_t *out_suffix);
+
int cmd_parse_conn_start_end(uint16_t *out_conn, uint16_t *out_start,
uint16_t *out_end);
diff --git a/apps/btshell/src/cmd_gatt.c b/apps/btshell/src/cmd_gatt.c
index 4c57b42d..734b1004 100644
--- a/apps/btshell/src/cmd_gatt.c
+++ b/apps/btshell/src/cmd_gatt.c
@@ -45,7 +45,7 @@ cmd_gatt_discover_characteristic(int argc, char **argv)
ble_uuid_any_t uuid;
int rc;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -56,7 +56,7 @@ cmd_gatt_discover_characteristic(int argc, char **argv)
return rc;
}
- rc = parse_arg_uuid("uuid", &uuid);
+ rc = parse_arg_ble_uuid("uuid", &uuid);
if (rc == 0) {
rc = btshell_disc_chrs_by_uuid(conn_handle, start_handle, end_handle,
&uuid.u);
@@ -82,7 +82,7 @@ cmd_gatt_discover_descriptor(int argc, char **argv)
uint16_t end_handle;
int rc;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -109,7 +109,7 @@ cmd_gatt_discover_service(int argc, char **argv)
int conn_handle;
int rc;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -120,7 +120,7 @@ cmd_gatt_discover_service(int argc, char **argv)
return rc;
}
- rc = parse_arg_uuid("uuid", &uuid);
+ rc = parse_arg_ble_uuid("uuid", &uuid);
if (rc == 0) {
rc = btshell_disc_svc_by_uuid(conn_handle, &uuid.u);
} else if (rc == ENOENT) {
@@ -144,7 +144,7 @@ cmd_gatt_discover_full(int argc, char **argv)
int conn_handle;
int rc;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -174,7 +174,7 @@ cmd_gatt_exchange_mtu(int argc, char **argv)
uint16_t conn_handle;
int rc;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -204,7 +204,7 @@ cmd_gatt_notify(int argc, char **argv)
uint16_t attr_handle;
int rc;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -241,7 +241,7 @@ cmd_gatt_read(int argc, char **argv)
bool is_var;
int rc;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -279,7 +279,7 @@ cmd_gatt_read(int argc, char **argv)
}
}
- rc = parse_arg_uuid("uuid", &uuid);
+ rc = parse_arg_ble_uuid("uuid", &uuid);
if (rc == ENOENT) {
is_uuid = 0;
} else if (rc == 0) {
@@ -351,7 +351,7 @@ cmd_gatt_service_changed(int argc, char **argv)
uint16_t end;
int rc;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -384,7 +384,7 @@ cmd_gatt_service_visibility(int argc, char **argv)
bool vis;
int rc;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -418,7 +418,7 @@ cmd_gatt_find_included_services(int argc, char **argv)
uint16_t end_handle;
int rc;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -482,13 +482,13 @@ cmd_gatt_write(int argc, char **argv)
uint16_t offset;
int total_attr_len;
int num_attrs;
- int attr_len;
+ unsigned int attr_len;
int is_long;
int no_rsp;
int rc;
int i;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
diff --git a/apps/btshell/src/cmd_l2cap.c b/apps/btshell/src/cmd_l2cap.c
index e74e3bf3..0c9d6a45 100644
--- a/apps/btshell/src/cmd_l2cap.c
+++ b/apps/btshell/src/cmd_l2cap.c
@@ -40,7 +40,7 @@ cmd_l2cap_update(int argc, char **argv)
uint16_t conn_handle;
int rc;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -101,7 +101,7 @@ cmd_l2cap_create_server(int argc, char **argv)
int accept_response = 0;
int rc;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -159,7 +159,7 @@ cmd_l2cap_connect(int argc, char **argv)
uint8_t num;
int rc;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -202,7 +202,7 @@ cmd_l2cap_disconnect(int argc, char **argv)
uint16_t idx;
int rc;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -234,7 +234,7 @@ cmd_l2cap_send(int argc, char **argv)
uint16_t bytes;
int rc;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -294,7 +294,7 @@ cmd_l2cap_reconfig(int argc, char **argv)
int num;
int rc;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -311,7 +311,7 @@ cmd_l2cap_reconfig(int argc, char **argv)
return rc;
}
- rc = parse_arg_uint8_list_with_separator("idxs", ",", 5, idxs, &num);
+ rc = parse_arg_byte_stream_custom("idxs", ",", 5, idxs, 0, &num);
if (rc != 0) {
console_printf("invalid 'idxs' parameter\n");
return rc;
diff --git a/apps/btshell/src/parse.c b/apps/btshell/src/parse.c
index e4dbade4..d759511a 100644
--- a/apps/btshell/src/parse.c
+++ b/apps/btshell/src/parse.c
@@ -19,633 +19,9 @@
#include <string.h>
#include <stdlib.h>
-#include <limits.h>
-#include <stdarg.h>
-#include <errno.h>
-#include <assert.h>
-#include <ctype.h>
-#include "console/console.h"
#include "host/ble_hs.h"
-#include "host/ble_uuid.h"
#include "host/ble_eddystone.h"
#include "cmd.h"
-#include "btshell.h"
-
-#define CMD_MAX_ARGS 16
-
-static char *cmd_args[CMD_MAX_ARGS][2];
-static int cmd_num_args;
-
-int
-parse_arg_find_idx(const char *key)
-{
- int i;
-
- for (i = 0; i < cmd_num_args; i++) {
- if (strcmp(cmd_args[i][0], key) == 0) {
- return i;
- }
- }
-
- return -1;
-}
-
-char *
-parse_arg_peek(const char *key)
-{
- int i;
-
- for (i = 0; i < cmd_num_args; i++) {
- if (strcmp(cmd_args[i][0], key) == 0) {
- return cmd_args[i][1];
- }
- }
-
- return NULL;
-}
-
-char *
-parse_arg_extract(const char *key)
-{
- int i;
-
- for (i = 0; i < cmd_num_args; i++) {
- if (strcmp(cmd_args[i][0], key) == 0) {
- /* Erase parameter. */
- cmd_args[i][0][0] = '\0';
-
- return cmd_args[i][1];
- }
- }
-
- return NULL;
-}
-
-/**
- * Determines which number base to use when parsing the specified numeric
- * string. This just avoids base '0' so that numbers don't get interpreted as
- * octal.
- */
-static int
-parse_arg_long_base(char *sval)
-{
- if (sval[0] == '0' && sval[1] == 'x') {
- return 0;
- } else {
- return 10;
- }
-}
-
-long
-parse_long_bounds(char *sval, long min, long max, int *out_status)
-{
- char *endptr;
- long lval;
-
- lval = strtol(sval, &endptr, parse_arg_long_base(sval));
- if (sval[0] != '\0' && *endptr == '\0' &&
- lval >= min && lval <= max) {
-
- *out_status = 0;
- return lval;
- }
-
- *out_status = EINVAL;
- return 0;
-}
-
-long
-parse_arg_long_bounds_peek(char *name, long min, long max, int *out_status)
-{
- char *sval;
-
- sval = parse_arg_peek(name);
- if (sval == NULL) {
- *out_status = ENOENT;
- return 0;
- }
- return parse_long_bounds(sval, min, max, out_status);
-}
-
-long
-parse_arg_long_bounds(char *name, long min, long max, int *out_status)
-{
- char *sval;
-
- sval = parse_arg_extract(name);
- if (sval == NULL) {
- *out_status = ENOENT;
- return 0;
- }
- return parse_long_bounds(sval, min, max, out_status);
-}
-
-long
-parse_arg_long_bounds_dflt(char *name, long min, long max,
- long dflt, int *out_status)
-{
- long val;
- int rc;
-
- val = parse_arg_long_bounds(name, min, max, &rc);
- if (rc == ENOENT) {
- rc = 0;
- val = dflt;
- }
-
- *out_status = rc;
-
- return val;
-}
-
-uint64_t
-parse_arg_uint64_bounds(char *name, uint64_t min, uint64_t max, int *out_status)
-{
- char *endptr;
- char *sval;
- uint64_t lval;
-
- sval = parse_arg_extract(name);
- if (sval == NULL) {
- *out_status = ENOENT;
- return 0;
- }
-
- lval = strtoull(sval, &endptr, parse_arg_long_base(sval));
- if (sval[0] != '\0' && *endptr == '\0' &&
- lval >= min && lval <= max) {
-
- *out_status = 0;
- return lval;
- }
-
- *out_status = EINVAL;
- return 0;
-}
-
-long
-parse_arg_long(char *name, int *out_status)
-{
- return parse_arg_long_bounds(name, LONG_MIN, LONG_MAX, out_status);
-}
-
-uint8_t
-parse_arg_bool(char *name, int *out_status)
-{
- return parse_arg_long_bounds(name, 0, 1, out_status);
-}
-
-uint8_t
-parse_arg_bool_dflt(char *name, uint8_t dflt, int *out_status)
-{
- return parse_arg_long_bounds_dflt(name, 0, 1, dflt, out_status);
-}
-
-uint8_t
-parse_arg_uint8(char *name, int *out_status)
-{
- return parse_arg_long_bounds(name, 0, UINT8_MAX, out_status);
-}
-
-uint16_t
-parse_arg_uint16(char *name, int *out_status)
-{
- return parse_arg_long_bounds(name, 0, UINT16_MAX, out_status);
-}
-
-uint16_t
-parse_arg_uint16_peek(char *name, int *out_status)
-{
- return parse_arg_long_bounds_peek(name, 0, UINT16_MAX, out_status);
-}
-
-uint32_t
-parse_arg_uint32(char *name, int *out_status)
-{
- return parse_arg_uint64_bounds(name, 0, UINT32_MAX, out_status);
-}
-
-uint64_t
-parse_arg_uint64(char *name, int *out_status)
-{
- return parse_arg_uint64_bounds(name, 0, UINT64_MAX, out_status);
-}
-
-uint8_t
-parse_arg_uint8_dflt(char *name, uint8_t dflt, int *out_status)
-{
- uint8_t val;
- int rc;
-
- val = parse_arg_uint8(name, &rc);
- if (rc == ENOENT) {
- val = dflt;
- rc = 0;
- }
-
- *out_status = rc;
- return val;
-}
-
-uint16_t
-parse_arg_uint16_dflt(char *name, uint16_t dflt, int *out_status)
-{
- uint16_t val;
- int rc;
-
- val = parse_arg_uint16(name, &rc);
- if (rc == ENOENT) {
- val = dflt;
- rc = 0;
- }
-
- *out_status = rc;
- return val;
-}
-
-uint32_t
-parse_arg_uint32_dflt(char *name, uint32_t dflt, int *out_status)
-{
- uint32_t val;
- int rc;
-
- val = parse_arg_uint32(name, &rc);
- if (rc == ENOENT) {
- val = dflt;
- rc = 0;
- }
-
- *out_status = rc;
- return val;
-}
-
-static uint32_t
-parse_time_unit_mult(const char *str)
-{
- if (!strcasecmp(str, "us")) {
- return 1;
- } else if (!strcasecmp(str, "ms")) {
- return 1000;
- } else if (!strcasecmp(str, "s")) {
- return 1000000;
- }
-
- return 0;
-}
-
-static uint32_t
-parse_time_us(const char *str, int *out_status)
-{
- uint32_t val = 0;
- uint32_t val_div = 1;
- uint32_t val_mult = 1;
- uint32_t val_us;
-
- while (isdigit((unsigned char)*str)) {
- val *= 10;
- val += *str - '0';
- str++;
- }
-
- if (*str == '.') {
- str++;
- while (isdigit((unsigned char)*str)) {
- val *= 10;
- val += *str - '0';
- val_div *= 10;
- str++;
- }
- }
-
- val_mult = parse_time_unit_mult(str);
- if (val_mult == 0) {
- *out_status = EINVAL;
- return 0;
- }
-
- if (val_mult > val_div) {
- val_us = val * (val_mult / val_div);
- } else {
- val_us = val * (val_div / val_mult);
- }
-
- *out_status = 0;
-
- return val_us;
-}
-
-uint32_t
-parse_arg_time_dflt(char *name, int step_us, uint32_t dflt, int *out_status)
-{
- const char *arg;
- uint32_t val;
- int rc;
-
- arg = parse_arg_peek(name);
- if (!arg) {
- *out_status = 0;
- return dflt;
- }
-
- val = parse_time_us(arg, &rc);
- if (rc) {
- val = parse_arg_uint32(name, &rc);
- if (rc == ENOENT) {
- *out_status = 0;
- return dflt;
- }
- } else {
- val /= step_us;
- parse_arg_extract(name);
- }
-
- *out_status = rc;
- return val;
-}
-
-const struct kv_pair *
-parse_kv_find(const struct kv_pair *kvs, char *name)
-{
- const struct kv_pair *kv;
- int i;
-
- for (i = 0; kvs[i].key != NULL; i++) {
- kv = kvs + i;
- if (strcmp(name, kv->key) == 0) {
- return kv;
- }
- }
-
- return NULL;
-}
-
-int
-parse_arg_kv(char *name, const struct kv_pair *kvs, int *out_status)
-{
- const struct kv_pair *kv;
- char *sval;
-
- sval = parse_arg_extract(name);
- if (sval == NULL) {
- *out_status = ENOENT;
- return -1;
- }
-
- kv = parse_kv_find(kvs, sval);
- if (kv == NULL) {
- *out_status = EINVAL;
- return -1;
- }
-
- *out_status = 0;
- return kv->val;
-}
-
-int
-parse_arg_kv_dflt(char *name, const struct kv_pair *kvs, int def_val,
- int *out_status)
-{
- int val;
- int rc;
-
- val = parse_arg_kv(name, kvs, &rc);
- if (rc == ENOENT) {
- rc = 0;
- val = def_val;
- }
-
- *out_status = rc;
-
- return val;
-}
-
-
-static int
-parse_arg_byte_stream_delim(char *sval, char *delims, int max_len,
- uint8_t *dst, int *out_len)
-{
- unsigned long ul;
- char *endptr;
- char *token;
- int i;
- char *tok_ptr;
-
- i = 0;
- for (token = strtok_r(sval, delims, &tok_ptr);
- token != NULL;
- token = strtok_r(NULL, delims, &tok_ptr)) {
-
- if (i >= max_len) {
- return EINVAL;
- }
-
- ul = strtoul(token, &endptr, 16);
- if (sval[0] == '\0' || *endptr != '\0' || ul > UINT8_MAX) {
- return -1;
- }
-
- dst[i] = ul;
- i++;
- }
-
- *out_len = i;
-
- return 0;
-}
-
-int
-parse_arg_byte_stream(char *name, int max_len, uint8_t *dst, int *out_len)
-{
- char *sval;
-
- sval = parse_arg_extract(name);
- if (sval == NULL) {
- return ENOENT;
- }
-
- return parse_arg_byte_stream_delim(sval, ":-", max_len, dst, out_len);
-}
-
-int
-parse_arg_uint8_list_with_separator(char *name, char *separator, int max_len,
- uint8_t *dst, int *out_len)
-{
- char *sval;
-
- sval = parse_arg_extract(name);
- if (sval == NULL) {
- return ENOENT;
- }
-
- return parse_arg_byte_stream_delim(sval, separator, max_len, dst, out_len);
-}
-
-int
-parse_arg_byte_stream_exact_length(char *name, uint8_t *dst, int len)
-{
- int actual_len;
- int rc;
-
- rc = parse_arg_byte_stream(name, len, dst, &actual_len);
- if (rc != 0) {
- return rc;
- }
-
- if (actual_len != len) {
- return EINVAL;
- }
-
- return 0;
-}
-
-static void
-parse_reverse_bytes(uint8_t *bytes, int len)
-{
- uint8_t tmp;
- int i;
-
- for (i = 0; i < len / 2; i++) {
- tmp = bytes[i];
- bytes[i] = bytes[len - i - 1];
- bytes[len - i - 1] = tmp;
- }
-}
-
-int
-parse_arg_mac(char *name, uint8_t *dst)
-{
- int rc;
-
- rc = parse_arg_byte_stream_exact_length(name, dst, 6);
- if (rc != 0) {
- return rc;
- }
-
- parse_reverse_bytes(dst, 6);
-
- return 0;
-}
-
-int
-parse_arg_addr(char *name, ble_addr_t *addr)
-{
- char *arg;
- size_t len;
- uint8_t addr_type;
- bool addr_type_found;
- int rc;
-
- arg = parse_arg_peek(name);
- if (!arg) {
- return ENOENT;
- }
-
- len = strlen(arg);
- if (len < 2) {
- return EINVAL;
- }
-
- addr_type_found = false;
- if ((arg[len - 2] == ':') || (arg[len - 2] == '-')) {
- if (tolower(arg[len - 1]) == 'p') {
- addr_type = BLE_ADDR_PUBLIC;
- addr_type_found = true;
- } else if (tolower(arg[len - 1]) == 'r') {
- addr_type = BLE_ADDR_RANDOM;
- addr_type_found = true;
- }
-
- if (addr_type_found) {
- arg[len - 2] = '\0';
- }
-}
-
- rc = parse_arg_mac(name, addr->val);
- if (rc != 0) {
- return rc;
- }
-
- if (addr_type_found) {
- addr->type = addr_type;
- } else {
- rc = EAGAIN;
- }
-
- return rc;
-}
-
-int
-parse_arg_uuid(char *str, ble_uuid_any_t *uuid)
-{
- uint16_t uuid16;
- uint8_t val[16];
- int len;
- int rc;
-
- uuid16 = parse_arg_uint16_peek(str, &rc);
- switch (rc) {
- case ENOENT:
- parse_arg_extract(str);
- return ENOENT;
-
- case 0:
- len = 2;
- val[0] = uuid16;
- val[1] = uuid16 >> 8;
- parse_arg_extract(str);
- break;
-
- default:
- len = 16;
- rc = parse_arg_byte_stream_exact_length(str, val, 16);
- if (rc != 0) {
- return EINVAL;
- }
- parse_reverse_bytes(val, 16);
- break;
- }
-
- rc = ble_uuid_init_from_buf(uuid, val, len);
- if (rc != 0) {
- return EINVAL;
- } else {
- return 0;
- }
-}
-
-int
-parse_arg_all(int argc, char **argv)
-{
- char *key;
- char *val;
- int i;
- char *tok_ptr;
-
- cmd_num_args = 0;
-
- for (i = 0; i < argc; i++) {
- key = strtok_r(argv[i], "=", &tok_ptr);
- val = strtok_r(NULL, "=", &tok_ptr);
-
- if (key != NULL && val != NULL) {
- if (strlen(key) == 0) {
- console_printf("Error: invalid argument: %s\n", argv[i]);
- return -1;
- }
-
- if (cmd_num_args >= CMD_MAX_ARGS) {
- console_printf("Error: too many arguments");
- return -1;
- }
-
- cmd_args[cmd_num_args][0] = key;
- cmd_args[cmd_num_args][1] = val;
- cmd_num_args++;
- }
- }
-
- return 0;
-}
int
parse_eddystone_url(char *full_url, uint8_t *out_scheme, char *out_body,
[mynewt-nimble] 02/02: apps/dtm: Port to parse_arg module
Posted by ja...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
janc pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-nimble.git
commit 61e724ab23572889bab317f71012f463ecc1383b
Author: Szymon Janc <sz...@codecoup.pl>
AuthorDate: Thu Jul 20 15:28:16 2023 +0200
apps/dtm: Port to parse_arg module
Make use of common argument parsing code.
---
apps/btshell/src/cmd.h | 3 -
apps/dtm/pkg.yml | 1 +
apps/dtm/src/main.c | 16 +-
apps/dtm/src/parse.c | 529 -------------------------------------------------
apps/dtm/src/parse.h | 58 ------
5 files changed, 9 insertions(+), 598 deletions(-)
diff --git a/apps/btshell/src/cmd.h b/apps/btshell/src/cmd.h
index 0984d009..1477ea85 100644
--- a/apps/btshell/src/cmd.h
+++ b/apps/btshell/src/cmd.h
@@ -24,9 +24,6 @@
#include "host/ble_uuid.h"
#include <parse_arg/parse_arg.h>
-//int parse_arg_mac(char *name, uint8_t *dst);
-//int parse_arg_addr(char *name, ble_addr_t *addr);
-//int parse_arg_uuid(char *name, ble_uuid_any_t *uuid);
int parse_eddystone_url(char *full_url, uint8_t *out_scheme, char *out_body,
uint8_t *out_body_len, uint8_t *out_suffix);
diff --git a/apps/dtm/pkg.yml b/apps/dtm/pkg.yml
index 2204befc..bf1ced36 100644
--- a/apps/dtm/pkg.yml
+++ b/apps/dtm/pkg.yml
@@ -28,6 +28,7 @@ pkg.deps:
- "@apache-mynewt-core/sys/shell"
- "@apache-mynewt-core/sys/console"
- "@apache-mynewt-core/kernel/os"
+ - "@apache-mynewt-core/util/parse_arg"
- "@apache-mynewt-nimble/nimble/host"
- "@apache-mynewt-mcumgr/cmd/img_mgmt"
- "@mcuboot/boot/bootutil"
diff --git a/apps/dtm/src/main.c b/apps/dtm/src/main.c
index 11f41160..3b171618 100644
--- a/apps/dtm/src/main.c
+++ b/apps/dtm/src/main.c
@@ -19,7 +19,7 @@
#include "os/mynewt.h"
#include <console/console.h>
-#include <parse.h>
+#include <parse_arg/parse_arg.h>
#include <shell/shell.h>
#include "nimble/ble.h"
#include "nimble/nimble_opt.h"
@@ -28,14 +28,14 @@
#include <img_mgmt/img_mgmt.h>
#include <bootutil/image.h>
-static const struct kv_pair phy_opts[] = {
+static const struct parse_arg_kv_pair phy_opts[] = {
{ "1M", 0x01 },
{ "2M", 0x02 },
{ "coded", 0x03 },
{ NULL }
};
-static const struct kv_pair modulation_index_opts[] = {
+static const struct parse_arg_kv_pair modulation_index_opts[] = {
{ "standard", 0x00 },
{ "stable", 0x01 },
{ NULL }
@@ -47,7 +47,7 @@ cmd_rx_test(int argc, char **argv)
struct ble_dtm_rx_params params;
int rc;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -87,7 +87,7 @@ cmd_tx_test(int argc, char **argv)
struct ble_dtm_tx_params params;
int rc;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -132,7 +132,7 @@ cmd_stop_test(int argc, char **argv)
uint16_t num_packets;
int rc;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -154,7 +154,7 @@ cmd_tx_power(int argc, char **argv)
struct ble_hci_vs_set_tx_pwr_rp rsp;
int rc;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
@@ -183,7 +183,7 @@ cmd_set_antenna(int argc, char **argv)
struct ble_hci_vs_set_antenna_cp cmd;
int rc;
- rc = parse_arg_all(argc - 1, argv + 1);
+ rc = parse_arg_init(argc - 1, argv + 1);
if (rc != 0) {
return rc;
}
diff --git a/apps/dtm/src/parse.c b/apps/dtm/src/parse.c
deleted file mode 100644
index ed79d740..00000000
--- a/apps/dtm/src/parse.c
+++ /dev/null
@@ -1,529 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#include <string.h>
-#include <stdlib.h>
-#include <limits.h>
-#include <stdarg.h>
-#include <errno.h>
-#include <assert.h>
-#include <ctype.h>
-#include <parse.h>
-#include "console/console.h"
-
-#define CMD_MAX_ARGS 16
-
-static char *cmd_args[CMD_MAX_ARGS][2];
-static int cmd_num_args;
-
-int
-parse_arg_find_idx(const char *key)
-{
- int i;
-
- for (i = 0; i < cmd_num_args; i++) {
- if (strcmp(cmd_args[i][0], key) == 0) {
- return i;
- }
- }
-
- return -1;
-}
-
-char *
-parse_arg_peek(const char *key)
-{
- int i;
-
- for (i = 0; i < cmd_num_args; i++) {
- if (strcmp(cmd_args[i][0], key) == 0) {
- return cmd_args[i][1];
- }
- }
-
- return NULL;
-}
-
-char *
-parse_arg_extract(const char *key)
-{
- int i;
-
- for (i = 0; i < cmd_num_args; i++) {
- if (strcmp(cmd_args[i][0], key) == 0) {
- /* Erase parameter. */
- cmd_args[i][0][0] = '\0';
-
- return cmd_args[i][1];
- }
- }
-
- return NULL;
-}
-
-/**
- * Determines which number base to use when parsing the specified numeric
- * string. This just avoids base '0' so that numbers don't get interpreted as
- * octal.
- */
-static int
-parse_arg_long_base(char *sval)
-{
- if (sval[0] == '0' && sval[1] == 'x') {
- return 0;
- } else {
- return 10;
- }
-}
-
-long
-parse_long_bounds(char *sval, long min, long max, int *out_status)
-{
- char *endptr;
- long lval;
-
- lval = strtol(sval, &endptr, parse_arg_long_base(sval));
- if (sval[0] != '\0' && *endptr == '\0' &&
- lval >= min && lval <= max) {
-
- *out_status = 0;
- return lval;
- }
-
- *out_status = EINVAL;
- return 0;
-}
-
-long
-parse_arg_long_bounds_peek(char *name, long min, long max, int *out_status)
-{
- char *sval;
-
- sval = parse_arg_peek(name);
- if (sval == NULL) {
- *out_status = ENOENT;
- return 0;
- }
- return parse_long_bounds(sval, min, max, out_status);
-}
-
-long
-parse_arg_long_bounds(char *name, long min, long max, int *out_status)
-{
- char *sval;
-
- sval = parse_arg_extract(name);
- if (sval == NULL) {
- *out_status = ENOENT;
- return 0;
- }
- return parse_long_bounds(sval, min, max, out_status);
-}
-
-long
-parse_arg_long_bounds_dflt(char *name, long min, long max,
- long dflt, int *out_status)
-{
- long val;
- int rc;
-
- val = parse_arg_long_bounds(name, min, max, &rc);
- if (rc == ENOENT) {
- rc = 0;
- val = dflt;
- }
-
- *out_status = rc;
-
- return val;
-}
-
-uint64_t
-parse_arg_uint64_bounds(char *name, uint64_t min, uint64_t max, int *out_status)
-{
- char *endptr;
- char *sval;
- uint64_t lval;
-
- sval = parse_arg_extract(name);
- if (sval == NULL) {
- *out_status = ENOENT;
- return 0;
- }
-
- lval = strtoull(sval, &endptr, parse_arg_long_base(sval));
- if (sval[0] != '\0' && *endptr == '\0' &&
- lval >= min && lval <= max) {
-
- *out_status = 0;
- return lval;
- }
-
- *out_status = EINVAL;
- return 0;
-}
-
-long
-parse_arg_long(char *name, int *out_status)
-{
- return parse_arg_long_bounds(name, LONG_MIN, LONG_MAX, out_status);
-}
-
-uint8_t
-parse_arg_bool(char *name, int *out_status)
-{
- return parse_arg_long_bounds(name, 0, 1, out_status);
-}
-
-uint8_t
-parse_arg_bool_dflt(char *name, uint8_t dflt, int *out_status)
-{
- return parse_arg_long_bounds_dflt(name, 0, 1, dflt, out_status);
-}
-
-uint8_t
-parse_arg_uint8(char *name, int *out_status)
-{
- return parse_arg_long_bounds(name, 0, UINT8_MAX, out_status);
-}
-
-uint16_t
-parse_arg_uint16(char *name, int *out_status)
-{
- return parse_arg_long_bounds(name, 0, UINT16_MAX, out_status);
-}
-
-uint16_t
-parse_arg_uint16_peek(char *name, int *out_status)
-{
- return parse_arg_long_bounds_peek(name, 0, UINT16_MAX, out_status);
-}
-
-uint32_t
-parse_arg_uint32(char *name, int *out_status)
-{
- return parse_arg_uint64_bounds(name, 0, UINT32_MAX, out_status);
-}
-
-uint64_t
-parse_arg_uint64(char *name, int *out_status)
-{
- return parse_arg_uint64_bounds(name, 0, UINT64_MAX, out_status);
-}
-
-uint8_t
-parse_arg_uint8_dflt(char *name, uint8_t dflt, int *out_status)
-{
- uint8_t val;
- int rc;
-
- val = parse_arg_uint8(name, &rc);
- if (rc == ENOENT) {
- val = dflt;
- rc = 0;
- }
-
- *out_status = rc;
- return val;
-}
-
-uint16_t
-parse_arg_uint16_dflt(char *name, uint16_t dflt, int *out_status)
-{
- uint16_t val;
- int rc;
-
- val = parse_arg_uint16(name, &rc);
- if (rc == ENOENT) {
- val = dflt;
- rc = 0;
- }
-
- *out_status = rc;
- return val;
-}
-
-uint32_t
-parse_arg_uint32_dflt(char *name, uint32_t dflt, int *out_status)
-{
- uint32_t val;
- int rc;
-
- val = parse_arg_uint32(name, &rc);
- if (rc == ENOENT) {
- val = dflt;
- rc = 0;
- }
-
- *out_status = rc;
- return val;
-}
-
-static uint32_t
-parse_time_unit_mult(const char *str)
-{
- if (!strcasecmp(str, "us")) {
- return 1;
- } else if (!strcasecmp(str, "ms")) {
- return 1000;
- } else if (!strcasecmp(str, "s")) {
- return 1000000;
- }
-
- return 0;
-}
-
-static uint32_t
-parse_time_us(const char *str, int *out_status)
-{
- uint32_t val = 0;
- uint32_t val_div = 1;
- uint32_t val_mult = 1;
- uint32_t val_us;
-
- while (isdigit((unsigned char)*str)) {
- val *= 10;
- val += *str - '0';
- str++;
- }
-
- if (*str == '.') {
- str++;
- while (isdigit((unsigned char)*str)) {
- val *= 10;
- val += *str - '0';
- val_div *= 10;
- str++;
- }
- }
-
- val_mult = parse_time_unit_mult(str);
- if (val_mult == 0) {
- *out_status = EINVAL;
- return 0;
- }
-
- if (val_mult > val_div) {
- val_us = val * (val_mult / val_div);
- } else {
- val_us = val * (val_div / val_mult);
- }
-
- *out_status = 0;
-
- return val_us;
-}
-
-uint32_t
-parse_arg_time_dflt(char *name, int step_us, uint32_t dflt, int *out_status)
-{
- const char *arg;
- uint32_t val;
- int rc;
-
- arg = parse_arg_peek(name);
- if (!arg) {
- *out_status = 0;
- return dflt;
- }
-
- val = parse_time_us(arg, &rc);
- if (rc) {
- val = parse_arg_uint32(name, &rc);
- if (rc == ENOENT) {
- *out_status = 0;
- return dflt;
- }
- } else {
- val /= step_us;
- parse_arg_extract(name);
- }
-
- *out_status = rc;
- return val;
-}
-
-const struct kv_pair *
-parse_kv_find(const struct kv_pair *kvs, char *name)
-{
- const struct kv_pair *kv;
- int i;
-
- for (i = 0; kvs[i].key != NULL; i++) {
- kv = kvs + i;
- if (strcmp(name, kv->key) == 0) {
- return kv;
- }
- }
-
- return NULL;
-}
-
-int
-parse_arg_kv(char *name, const struct kv_pair *kvs, int *out_status)
-{
- const struct kv_pair *kv;
- char *sval;
-
- sval = parse_arg_extract(name);
- if (sval == NULL) {
- *out_status = ENOENT;
- return -1;
- }
-
- kv = parse_kv_find(kvs, sval);
- if (kv == NULL) {
- *out_status = EINVAL;
- return -1;
- }
-
- *out_status = 0;
- return kv->val;
-}
-
-int
-parse_arg_kv_dflt(char *name, const struct kv_pair *kvs, int def_val,
- int *out_status)
-{
- int val;
- int rc;
-
- val = parse_arg_kv(name, kvs, &rc);
- if (rc == ENOENT) {
- rc = 0;
- val = def_val;
- }
-
- *out_status = rc;
-
- return val;
-}
-
-
-static int
-parse_arg_byte_stream_delim(char *sval, char *delims, int max_len,
- uint8_t *dst, int *out_len)
-{
- unsigned long ul;
- char *endptr;
- char *token;
- int i;
- char *tok_ptr;
-
- i = 0;
- for (token = strtok_r(sval, delims, &tok_ptr);
- token != NULL;
- token = strtok_r(NULL, delims, &tok_ptr)) {
-
- if (i >= max_len) {
- return EINVAL;
- }
-
- ul = strtoul(token, &endptr, 16);
- if (sval[0] == '\0' || *endptr != '\0' || ul > UINT8_MAX) {
- return -1;
- }
-
- dst[i] = ul;
- i++;
- }
-
- *out_len = i;
-
- return 0;
-}
-
-int
-parse_arg_byte_stream(char *name, int max_len, uint8_t *dst, int *out_len)
-{
- char *sval;
-
- sval = parse_arg_extract(name);
- if (sval == NULL) {
- return ENOENT;
- }
-
- return parse_arg_byte_stream_delim(sval, ":-", max_len, dst, out_len);
-}
-
-int
-parse_arg_uint8_list_with_separator(char *name, char *separator, int max_len,
- uint8_t *dst, int *out_len)
-{
- char *sval;
-
- sval = parse_arg_extract(name);
- if (sval == NULL) {
- return ENOENT;
- }
-
- return parse_arg_byte_stream_delim(sval, separator, max_len, dst, out_len);
-}
-
-int
-parse_arg_byte_stream_exact_length(char *name, uint8_t *dst, int len)
-{
- int actual_len;
- int rc;
-
- rc = parse_arg_byte_stream(name, len, dst, &actual_len);
- if (rc != 0) {
- return rc;
- }
-
- if (actual_len != len) {
- return EINVAL;
- }
-
- return 0;
-}
-
-int
-parse_arg_all(int argc, char **argv)
-{
- char *key;
- char *val;
- int i;
- char *tok_ptr;
-
- cmd_num_args = 0;
-
- for (i = 0; i < argc; i++) {
- key = strtok_r(argv[i], "=", &tok_ptr);
- val = strtok_r(NULL, "=", &tok_ptr);
-
- if (key != NULL && val != NULL) {
- if (strlen(key) == 0) {
- console_printf("Error: invalid argument: %s\n", argv[i]);
- return -1;
- }
-
- if (cmd_num_args >= CMD_MAX_ARGS) {
- console_printf("Error: too many arguments");
- return -1;
- }
-
- cmd_args[cmd_num_args][0] = key;
- cmd_args[cmd_num_args][1] = val;
- cmd_num_args++;
- }
- }
-
- return 0;
-}
diff --git a/apps/dtm/src/parse.h b/apps/dtm/src/parse.h
deleted file mode 100644
index a0255d36..00000000
--- a/apps/dtm/src/parse.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#ifndef PARSE_H
-#define PARSE_H
-
-#include <inttypes.h>
-
-struct kv_pair {
- char *key;
- int val;
-};
-
-uint32_t parse_arg_time_dflt(char *name, int step, uint32_t dflt, int *out_status);
-const struct kv_pair *parse_kv_find(const struct kv_pair *kvs, char *name);
-int parse_arg_find_idx(const char *key);
-char *parse_arg_extract(const char *key);
-long parse_arg_long_bounds(char *name, long min, long max, int *out_status);
-long parse_arg_long_bounds_dflt(char *name, long min, long max,
- long dflt, int *out_status);
-uint64_t parse_arg_uint64_bounds(char *name, uint64_t min,
- uint64_t max, int *out_status);
-long parse_arg_long(char *name, int *staus);
-uint8_t parse_arg_bool(char *name, int *status);
-uint8_t parse_arg_bool_dflt(char *name, uint8_t dflt, int *out_status);
-uint8_t parse_arg_uint8(char *name, int *status);
-uint8_t parse_arg_uint8_dflt(char *name, uint8_t dflt, int *out_status);
-uint16_t parse_arg_uint16(char *name, int *status);
-uint16_t parse_arg_uint16_dflt(char *name, uint16_t dflt, int *out_status);
-uint32_t parse_arg_uint32(char *name, int *out_status);
-uint32_t parse_arg_uint32_dflt(char *name, uint32_t dflt, int *out_status);
-uint64_t parse_arg_uint64(char *name, int *out_status);
-int parse_arg_kv(char *name, const struct kv_pair *kvs, int *out_status);
-int parse_arg_kv_dflt(char *name, const struct kv_pair *kvs, int def_val,
- int *out_status);
-int parse_arg_byte_stream(char *name, int max_len, uint8_t *dst, int *out_len);
-int parse_arg_uint8_list_with_separator(char *name, char *separator, int max_len,
- uint8_t *dst, int *out_len);
-int parse_arg_byte_stream_exact_length(char *name, uint8_t *dst, int len);
-int parse_arg_all(int argc, char **argv);
-
-#endif