diff options
author | Inga Stotland <inga.stotland@intel.com> | 2018-08-29 11:25:55 -0700 |
---|---|---|
committer | Luiz Augusto von Dentz <luiz.von.dentz@intel.com> | 2018-08-31 17:25:25 +0300 |
commit | 25741fa67deb13dd21b176444a8ee954e1ac2486 (patch) | |
tree | 142c511fcd4d51c8056674a3c03d4904a15e43d0 /tools | |
parent | c704a72ce2873bc3b272ab3edb3a78e8a11c672e (diff) | |
download | bluez-25741fa67deb13dd21b176444a8ee954e1ac2486.tar.gz |
tools/meshctl: Fix default directory for JSON files
This fixes the name of default directory that contains sample JSON files.
README file is updated to describe the default location.
Diffstat (limited to 'tools')
-rw-r--r-- | tools/mesh/README | 19 | ||||
-rw-r--r-- | tools/meshctl.c | 63 |
2 files changed, 60 insertions, 22 deletions
diff --git a/tools/mesh/README b/tools/mesh/README index ea561efc8..44d633313 100644 --- a/tools/mesh/README +++ b/tools/mesh/README @@ -1,5 +1,5 @@ MeshCtl - BlueZ GATT based Bluetooth Mesh Provisioner -****************************************** +***************************************************** Copyright (C) 2017 Intel Corporation. All rights reserved. @@ -16,6 +16,23 @@ Configuration and options Build meshctl and other Bluetooth Mesh based tools and utils +Example configuration files +=========================== + +The MeshCtl tool requires two input configuration files in JSON format: + - local_node.json + Local mesh node configuration + - prov_db.json + Provisoner's database for all the configured nodes in the mesh + +The default directory for MeshCtl configuration files is +/home/<username>/.config/meshctl + +To use .json configuration files either copy them to the default directory +or, to specify a custom storage directory, run meshctl tool as: + + meshctl -c <config_dir_name> + Information =========== diff --git a/tools/meshctl.c b/tools/meshctl.c index 3e1484f61..cbf62ce70 100644 --- a/tools/meshctl.c +++ b/tools/meshctl.c @@ -1873,7 +1873,7 @@ static const struct bt_shell_menu main_menu = { { } }, }; -static const char *mesh_config_dir; +static const char *config_dir; static const struct option options[] = { { "config", required_argument, 0, 'c' }, @@ -1881,7 +1881,7 @@ static const struct option options[] = { }; static const char **optargs[] = { - &mesh_config_dir + &config_dir }; static const char *help[] = { @@ -1907,38 +1907,57 @@ int main(int argc, char *argv[]) int status; int len; int extra; + char *mesh_dir = NULL; bt_shell_init(argc, argv, &opt); bt_shell_set_menu(&main_menu); bt_shell_set_prompt(PROMPT_OFF); - if (!mesh_config_dir) { - bt_shell_printf("Local config directory not provided.\n"); - mesh_config_dir = ""; + if (!config_dir) { + char *home; + + home = getenv("XDG_CONFIG_HOME"); + if (home) { + mesh_dir = g_strdup_printf("%s/meshctl", home); + } + + if (!mesh_dir) { + home = getenv("HOME"); + if (home) + mesh_dir = g_strdup_printf("%s/.config/meshctl", + home); + } + + if (!mesh_dir) { + g_printerr("Configuration directory not found\n"); + goto fail; + } + } else { - bt_shell_printf("Reading prov_db.json and local_node.json from" - " %s\n", mesh_config_dir); + mesh_dir = g_strdup_printf("%s", config_dir); } - len = strlen(mesh_config_dir); - if (len && mesh_config_dir[len - 1] != '/') { + + g_print("Reading prov_db.json and local_node.json from %s directory\n", + mesh_dir); + + len = strlen(mesh_dir); + + if (len && mesh_dir[len - 1] != '/') extra = 1; - bt_shell_printf("mesh_config_dir[%d] %s\n", len, - &mesh_config_dir[len - 1]); - } else { + else extra = 0; - } + mesh_local_config_filename = g_malloc(len + strlen("local_node.json") + 2); if (!mesh_local_config_filename) goto fail; mesh_prov_db_filename = g_malloc(len + strlen("prov_db.json") + 2); - if (!mesh_prov_db_filename) { + if (!mesh_prov_db_filename) goto fail; - } - sprintf(mesh_local_config_filename, "%s", mesh_config_dir); + sprintf(mesh_local_config_filename, "%s", mesh_dir); if (extra) sprintf(mesh_local_config_filename + len , "%c", '/'); @@ -1946,7 +1965,6 @@ int main(int argc, char *argv[]) sprintf(mesh_local_config_filename + len + extra, "%s", "local_node.json"); len = len + extra + strlen("local_node.json"); - sprintf(mesh_local_config_filename + len, "%c", '\0'); if (!prov_db_read_local_node(mesh_local_config_filename, true)) { g_printerr("Failed to parse local node configuration file %s\n", @@ -1954,14 +1972,15 @@ int main(int argc, char *argv[]) goto fail; } - sprintf(mesh_prov_db_filename, "%s", mesh_config_dir); - len = strlen(mesh_config_dir); + sprintf(mesh_prov_db_filename, "%s", mesh_dir); + len = strlen(mesh_dir); + + g_free(mesh_dir); + if (extra) sprintf(mesh_prov_db_filename + len , "%c", '/'); sprintf(mesh_prov_db_filename + len + extra, "%s", "prov_db.json"); - sprintf(mesh_prov_db_filename + len + extra + strlen("prov_db.json"), - "%c", '\0'); if (!prov_db_read(mesh_prov_db_filename)) { g_printerr("Failed to parse provisioning database file %s\n", @@ -2006,5 +2025,7 @@ int main(int argc, char *argv[]) fail: bt_shell_cleanup(); + g_free(mesh_dir); + return EXIT_FAILURE; } |