Skip to content

Commit ae8e6b4

Browse files
authored
Rename cli tools/cleanup cli args [CPP-633] [CPP-655] (#417)
* rename piksi-settings -> swift-settings * rename fileio -> swift-files * replace subcommand style connection inputs with flags
1 parent b679364 commit ae8e6b4

File tree

9 files changed

+199
-179
lines changed

9 files changed

+199
-179
lines changed

.cargo/config

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,5 @@ rustflags = [
1111
]
1212

1313
[alias]
14-
fileio = "run --bin fileio --no-default-features --features env_logger,indicatif --"
15-
settings = "run --bin piksi-settings --no-default-features --features env_logger --"
14+
files = "run --bin swift-files --no-default-features --features env_logger,indicatif --"
15+
settings = "run --bin swift-settings --no-default-features --features env_logger --"

.github/workflows/main.yml

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -306,28 +306,28 @@ jobs:
306306
echo "INSTALLER_ARCHIVE=$(cat installer-archive.filename)" >>$GITHUB_ENV
307307
if: github.event_name == 'push' && contains(github.ref, 'refs/tags')
308308

309-
- name: Build ${{ runner.os }} fileio binary.
309+
- name: Build ${{ runner.os }} swift-files binary.
310310
run: |
311-
cargo build --bin fileio --features="env_logger,indicatif" --release
311+
cargo build --bin swift-files --features="env_logger,indicatif" --release
312312
# Building on Mac currently not working (DEVINFRA-612)
313313
if: matrix.os.name != 'windows-2019' && matrix.os.name != 'macos-10.15'
314314

315-
- name: Build ${{ runner.os }} fileio binary.
315+
- name: Build ${{ runner.os }} swift-files binary.
316316
run: |
317-
cargo build --bin fileio --features="env_logger,indicatif" --release
317+
cargo build --bin swift-files --features="env_logger,indicatif" --release
318318
env:
319319
LIBCLANG_PATH: ${{ env.LIBCLANG_PATH_WIN }}
320320
if: matrix.os.name == 'windows-2019'
321321

322-
- name: Build ${{ runner.os }} piksi-settings binary.
322+
- name: Build ${{ runner.os }} swift-settings binary.
323323
run: |
324-
cargo build --bin piksi-settings --features="env_logger" --release
324+
cargo build --bin swift-settings --features="env_logger" --release
325325
# Building on Mac currently not working (DEVINFRA-612)
326326
if: matrix.os.name != 'windows-2019' && matrix.os.name != 'macos-10.15'
327327

328-
- name: Build ${{ runner.os }} piksi-settings binary.
328+
- name: Build ${{ runner.os }} swift-settings binary.
329329
run: |
330-
cargo build --bin piksi-settings --features="env_logger" --release
330+
cargo build --bin swift-settings --features="env_logger" --release
331331
env:
332332
LIBCLANG_PATH: ${{ env.LIBCLANG_PATH_WIN }}
333333
if: matrix.os.name == 'windows-2019'
@@ -363,12 +363,12 @@ jobs:
363363
release-archive.filename
364364
- uses: actions/upload-artifact@v2
365365
with:
366-
name: fileio_${{ matrix.os.short_name }}
367-
path: ./target/release/fileio${{ matrix.os.exe_suffix }}
366+
name: swift-files_${{ matrix.os.short_name }}
367+
path: ./target/release/swift-files${{ matrix.os.exe_suffix }}
368368
- uses: actions/upload-artifact@v2
369369
with:
370-
name: piksi-settings_${{ matrix.os.short_name }}
371-
path: ./target/release/piksi-settings${{ matrix.os.exe_suffix }}
370+
name: swift-settings_${{ matrix.os.short_name }}
371+
path: ./target/release/swift-settings${{ matrix.os.exe_suffix }}
372372
- uses: actions/upload-artifact@v2
373373
with:
374374
name: ${{ runner.os }}-artifacts-debug
@@ -533,30 +533,30 @@ jobs:
533533
with:
534534
name: Windows-installer-signed
535535
path: windows
536-
- name: Pull Windows fileio
536+
- name: Pull Windows swift-files
537537
uses: actions/download-artifact@v2
538538
with:
539-
name: fileio_windows
539+
name: swift-files_windows
540540
path: windows
541-
- name: Pull Windows piksi-settings
541+
- name: Pull Windows swift-settings
542542
uses: actions/download-artifact@v2
543543
with:
544-
name: piksi-settings_windows
544+
name: swift-settings_windows
545545
path: windows
546546
- name: Pull Linux Installer
547547
uses: actions/download-artifact@v2
548548
with:
549549
name: Linux-installer
550550
path: linux
551-
- name: Pull Linux fileio
551+
- name: Pull Linux swift-files
552552
uses: actions/download-artifact@v2
553553
with:
554-
name: fileio_linux
554+
name: swift-files_linux
555555
path: linux
556-
- name: Pull Linux piksi-settings
556+
- name: Pull Linux swift-settings
557557
uses: actions/download-artifact@v2
558558
with:
559-
name: piksi-settings_linux
559+
name: swift-settings_linux
560560
path: linux
561561
- name: Pull macOS Installer
562562
uses: actions/download-artifact@v2
@@ -567,10 +567,10 @@ jobs:
567567
- name: Prepare Release
568568
shell: bash
569569
run: |
570-
mv linux/fileio linux/fileio_${{ env.VERSION }}_linux
571-
mv linux/piksi-settings linux/piksi-settings_${{ env.VERSION }}_linux
572-
mv windows/fileio.exe windows/fileio_${{ env.VERSION }}_windows.exe
573-
mv windows/piksi-settings.exe windows/piksi-settings_${{ env.VERSION }}_windows.exe
570+
mv linux/swift-files linux/swift-files_${{ env.VERSION }}_linux
571+
mv linux/swift-settings linux/swift-settings_${{ env.VERSION }}_linux
572+
mv windows/swift-files.exe windows/swift-files_${{ env.VERSION }}_windows.exe
573+
mv windows/swift-settings.exe windows/swift-settings_${{ env.VERSION }}_windows.exe
574574
echo "WINDOWS_ARCHIVE=$(cat windows/installer-archive.filename)" >>$GITHUB_ENV
575575
echo "LINUX_ARCHIVE=$(cat linux/installer-archive.filename)" >>$GITHUB_ENV
576576
echo "MACOS_ARCHIVE=$(cat macos/installer-archive.filename)" >>$GITHUB_ENV
@@ -580,11 +580,11 @@ jobs:
580580
name: "${{ env.VERSION }}-${{ env.DATE }}"
581581
files: |
582582
windows/${{ env.WINDOWS_ARCHIVE }}
583-
windows/fileio_${{ env.VERSION }}_windows.exe
584-
windows/piksi-settings_${{ env.VERSION }}_windows.exe
583+
windows/swift-files_${{ env.VERSION }}_windows.exe
584+
windows/swift-settings_${{ env.VERSION }}_windows.exe
585585
linux/${{ env.LINUX_ARCHIVE }}
586-
linux/fileio_${{ env.VERSION }}_linux
587-
linux/piksi-settings_${{ env.VERSION }}_linux
586+
linux/swift-files_${{ env.VERSION }}_linux
587+
linux/swift-settings_${{ env.VERSION }}_linux
588588
macos/${{ env.MACOS_ARCHIVE }}
589589
env:
590590
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

console_backend/Cargo.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,14 +73,14 @@ name = "cpu_benches"
7373
harness = false
7474

7575
[[bin]]
76-
name = "piksi-settings"
76+
name = "swift-settings"
7777
path = "src/bin/settings.rs"
7878
bench = false
7979
required-features = ["env_logger"]
8080

8181
[[bin]]
82-
name = "fileio"
83-
path = "src/bin/fileio.rs"
82+
name = "swift-files"
83+
path = "src/bin/files.rs"
8484
bench = false
8585
required-features = ["env_logger", "indicatif"]
8686

console_backend/src/bin/fileio.rs renamed to console_backend/src/bin/files.rs

Lines changed: 52 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,16 @@ use std::{
1111
use anyhow::{anyhow, Context};
1212
use clap::{
1313
AppSettings::{ArgRequiredElseHelp, DeriveDisplayOrder},
14-
Parser,
14+
Args, Parser,
1515
};
1616
use indicatif::{ProgressBar, ProgressStyle};
1717
use sbp::{link::LinkSource, SbpIterExt};
1818

1919
use console_backend::{
20-
cli_options::ConnectionOpts,
20+
cli_options::is_baudrate,
2121
connection::Connection,
2222
fileio::Fileio,
23-
types::{MsgSender, Result},
23+
types::{FlowControl, MsgSender, Result},
2424
};
2525

2626
fn main() -> Result<()> {
@@ -44,36 +44,36 @@ fn main() -> Result<()> {
4444
}
4545
}
4646

47-
/// Piksi File IO operations.
47+
/// A SwiftNav fileio API client
4848
#[derive(Parser)]
4949
#[clap(
50-
name = "fileio",
50+
name = "swift-files",
5151
version = include_str!("../version.txt"),
5252
setting = ArgRequiredElseHelp | DeriveDisplayOrder,
5353
override_usage = "\
54-
fileio <SRC> <DEST>
55-
fileio --list <SRC>
56-
fileio --delete <SRC>
54+
swift-files <SRC> <DEST>
55+
swift-files --list <SRC>
56+
swift-files --delete <SRC>
5757
5858
TCP Examples:
5959
- List files on Piksi:
60-
fileio --list 192.168.0.222:/data/
60+
swift-files --list 192.168.0.222:/data/
6161
- Read file from Piksi:
62-
fileio 192.168.0.222:/persistent/config.ini ./config.ini
62+
swift-files 192.168.0.222:/persistent/config.ini ./config.ini
6363
- Write file to Piksi:
64-
fileio ./config.ini 192.168.0.222:/persistent/config.ini
64+
swift-files ./config.ini 192.168.0.222:/persistent/config.ini
6565
- Delete file from Piksi:
66-
fileio --delete 192.168.0.222:/persistent/unwanted_file
66+
swift-files --delete 192.168.0.222:/persistent/unwanted_file
6767
6868
Serial Examples:
6969
- List files on Piksi:
70-
fileio --list /dev/ttyUSB0:/data/
70+
swift-files --list /dev/ttyUSB0:/data/
7171
- Read file from Piksi:
72-
fileio /dev/ttyUSB0:/persistent/config.ini ./config.ini
72+
swift-files /dev/ttyUSB0:/persistent/config.ini ./config.ini
7373
- Write file to Piksi:
74-
fileio ./config.ini /dev/ttyUSB0:/persistent/config.ini
74+
swift-files ./config.ini /dev/ttyUSB0:/persistent/config.ini
7575
- Delete file from Piksi:
76-
fileio --delete /dev/ttyUSB0:/persistent/unwanted_file
76+
swift-files --delete /dev/ttyUSB0:/persistent/unwanted_file
7777
"
7878
)]
7979
struct Opts {
@@ -95,6 +95,26 @@ struct Opts {
9595
conn: ConnectionOpts,
9696
}
9797

98+
#[derive(Clone, Copy, Args)]
99+
struct ConnectionOpts {
100+
/// The port to use when connecting via TCP
101+
#[clap(long, default_value = "55555", conflicts_with_all = &["baudrate", "flow-control"])]
102+
port: u16,
103+
104+
/// The baudrate for processing packets when connecting via serial
105+
#[clap(
106+
long,
107+
default_value = "115200",
108+
validator(is_baudrate),
109+
conflicts_with = "port"
110+
)]
111+
baudrate: u32,
112+
113+
/// The flow control spec to use when connecting via serial
114+
#[clap(long, default_value = "None", conflicts_with = "port")]
115+
flow_control: FlowControl,
116+
}
117+
98118
fn list(target: Target, conn: ConnectionOpts) -> Result<()> {
99119
let remote = target
100120
.into_remote()
@@ -208,7 +228,7 @@ struct Remote {
208228

209229
impl Remote {
210230
fn connect(&self, conn: ConnectionOpts) -> Result<Fileio> {
211-
let (reader, writer) = Connection::discover(self.host.clone(), conn)?.try_connect(None)?;
231+
let (reader, writer) = discover(self.host.clone(), conn)?.try_connect(None)?;
212232
let source = LinkSource::new();
213233
let link = source.link();
214234
std::thread::spawn(move || {
@@ -259,3 +279,18 @@ impl ReadProgress {
259279
}
260280
}
261281
}
282+
283+
/// Connect via a serial port or tcp
284+
fn discover(host: String, opts: ConnectionOpts) -> Result<Connection> {
285+
match fs::File::open(&host) {
286+
Err(e) if e.kind() == io::ErrorKind::PermissionDenied => Err(e.into()),
287+
Ok(_) => {
288+
log::debug!("connecting via serial");
289+
Ok(Connection::serial(host, opts.baudrate, opts.flow_control))
290+
}
291+
Err(_) => {
292+
log::debug!("connecting via tcp");
293+
Connection::tcp(host, opts.port)
294+
}
295+
}
296+
}

console_backend/src/bin/headless-console.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,14 @@ use crossbeam::channel;
1313

1414
fn main() -> Result<()> {
1515
let opt = CliOptions::from_filtered_cli();
16-
if opt.input.is_none() {
16+
if opt.serial.serial.is_none() && opt.tcp.tcp.is_none() && opt.file.file.is_none() {
1717
eprintln!(
1818
r#"
1919
Running in headless mode only command line options work.
2020
Help:
2121
./headless-console --help
2222
Usage:
23-
./headless-console tcp piksi-relay-bb9f2b10e53143f4a816a11884e679cf.ce.swiftnav.com --port=55555
23+
./headless-console --tcp piksi-relay-bb9f2b10e53143f4a816a11884e679cf.ce.swiftnav.com --port=55555
2424
"#
2525
);
2626
return Ok(());

console_backend/src/bin/settings.rs

Lines changed: 30 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
use std::{convert::Infallible, path::PathBuf, str::FromStr, sync::Arc};
22

3-
use clap::{AppSettings::DeriveDisplayOrder, Parser};
3+
use anyhow::anyhow;
4+
use clap::{AppSettings::DeriveDisplayOrder, ArgGroup, Parser};
45
use sbp::SbpIterExt;
56

67
use console_backend::{
7-
cli_options::ConnectionOpts,
8+
cli_options::{SerialOpts, TcpOpts},
89
client_sender::TestSender,
910
connection::Connection,
1011
settings_tab::SettingsTab,
@@ -72,33 +73,37 @@ fn write(write_cmds: &[WriteCmd], settings: &SettingsTab) -> Result<()> {
7273
Ok(())
7374
}
7475

75-
/// Piksi settings operations.
76+
/// A SwiftNav settings API client
7677
#[derive(Parser)]
7778
#[clap(
78-
name = "piksi-settings",
79+
name = "swift-settings",
7980
version = include_str!("../version.txt"),
8081
setting = DeriveDisplayOrder,
82+
group = ArgGroup::new("conn").required(true).args(&["serial", "tcp"]),
8183
override_usage = "\
82-
piksi-settings [OPTIONS] <DEVICE>
84+
swift-settings [OPTIONS]
8385
8486
Examples:
8587
- Read a setting:
86-
piksi-settings /dev/ttyUSB0 --read imu.acc_range
88+
swift-settings --serial /dev/ttyUSB0 --read imu.acc_range
8789
- Read a group of settings:
88-
piksi-settings /dev/ttyUSB0 --read imu
90+
swift-settings --serial /dev/ttyUSB0 --read imu
8991
- Write a setting value:
90-
piksi-settings /dev/ttyUSB0 --write imu.acc_range=2g
92+
swift-settings --serial /dev/ttyUSB0 --write imu.acc_range=2g
9193
- Write multiple settings and save to flash:
92-
piksi-settings /dev/ttyUSB0 -w imu.acc_range=2g -w imu.imu_rate=100 --save
94+
swift-settings --serial /dev/ttyUSB0 -w imu.acc_range=2g -w imu.imu_rate=100 --save
9395
- Export a device's settings
94-
piksi-settings /dev/ttyUSB0 --export ./config.ini
96+
swift-settings --serial /dev/ttyUSB0 --export ./config.ini
9597
- Import a device's settings
96-
piksi-settings /dev/ttyUSB0 --import ./config.ini
98+
swift-settings --serial /dev/ttyUSB0 --import ./config.ini
9799
"
98100
)]
99101
struct Opts {
100-
/// The serial port or TCP stream
101-
device: String,
102+
#[clap(flatten)]
103+
serial: SerialOpts,
104+
105+
#[clap(flatten)]
106+
tcp: TcpOpts,
102107

103108
/// Read a setting or a group of settings
104109
#[clap(
@@ -147,14 +152,21 @@ struct Opts {
147152
conflicts_with_all = &["read", "write", "export", "import", "save"]
148153
)]
149154
reset: bool,
150-
151-
#[clap(flatten)]
152-
conn: ConnectionOpts,
153155
}
154156

155157
fn connect(opts: &Opts) -> Result<Arc<SettingsTab>> {
156-
let (reader, writer) =
157-
Connection::discover(opts.device.clone(), opts.conn)?.try_connect(None)?;
158+
let (reader, writer) = if let Some(ref serial) = opts.serial.serial {
159+
Connection::serial(
160+
serial.to_string_lossy().into(),
161+
opts.serial.baudrate,
162+
opts.serial.flow_control,
163+
)
164+
.try_connect(None)?
165+
} else if let Some(ref tcp) = opts.tcp.tcp {
166+
Connection::tcp(tcp.host.clone(), tcp.port)?.try_connect(None)?
167+
} else {
168+
return Err(anyhow!("No serialport or tcp string supplied"));
169+
};
158170
let sender = MsgSender::new(writer);
159171
let shared_state = SharedState::new();
160172
let settings = Arc::new(SettingsTab::new(shared_state, TestSender::boxed(), sender));

0 commit comments

Comments
 (0)