Skip to content

Commit 6a607b4

Browse files
authored
Merge pull request #227 from LedgerHQ/y333_20122024/appflags_device_metadata
appflags shall be set in hex value and could be set at device level
2 parents 52bec2a + 72c22a9 commit 6a607b4

File tree

3 files changed

+25
-50
lines changed

3 files changed

+25
-50
lines changed

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

cargo-ledger/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[package]
22
name = "cargo-ledger"
3-
version = "1.5.1"
4-
authors = ["yhql", "agrojean-ledger"]
3+
version = "1.6.0"
4+
authors = ["yhql", "agrojean-ledger", "y333"]
55
description = "Build and sideload Ledger devices apps"
66
categories = ["development-tools::cargo-plugins"]
77
repository = "https://github.com/LedgerHQ/cargo-ledger"

cargo-ledger/src/main.rs

Lines changed: 22 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -16,29 +16,18 @@ use utils::*;
1616
mod setup;
1717
mod utils;
1818

19-
/// Structure for retrocompatibility, when the cargo manifest file
20-
/// contains a single `[package.metadata.nanos]` section
21-
#[derive(Debug, Deserialize)]
22-
struct NanosMetadata {
23-
curve: Vec<String>,
24-
path: Vec<String>,
25-
flags: String,
26-
icon: String,
27-
icon_small: String,
28-
name: Option<String>,
29-
}
30-
3119
#[derive(Debug, Deserialize)]
3220
struct LedgerMetadata {
3321
curve: Vec<String>,
3422
path: Vec<String>,
35-
flags: String,
23+
flags: Option<String>,
3624
name: Option<String>,
3725
}
3826

3927
#[derive(Debug, Deserialize)]
4028
struct DeviceMetadata {
4129
icon: String,
30+
flags: Option<String>,
4231
}
4332

4433
#[derive(Parser, Debug)]
@@ -123,7 +112,7 @@ fn main() {
123112
fn retrieve_metadata(
124113
device: Device,
125114
manifest_path: Option<&str>,
126-
) -> (Package, LedgerMetadata, DeviceMetadata) {
115+
) -> Result<(Package, LedgerMetadata, DeviceMetadata), ()> {
127116
let mut cmd = cargo_metadata::MetadataCommand::new();
128117

129118
// Only used during tests
@@ -154,31 +143,10 @@ fn retrieve_metadata(
154143
serde_json::from_value(metadata_device)
155144
.expect("Could not deserialize device medatada");
156145

157-
(this_pkg.clone(), ledger_metadata, device_metadata)
146+
Ok((this_pkg.clone(), ledger_metadata, device_metadata))
158147
} else {
159-
println!("WARNING: 'package.metadata.ledger' section is missing in Cargo.toml, trying 'package.metadata.nanos'");
160-
let nanos_section = this_pkg.metadata.get("nanos").expect(
161-
"No appropriate [package.metadata.<ledger|nanos>] section found.",
162-
);
163-
164-
let nanos_metadata: NanosMetadata =
165-
serde_json::from_value(nanos_section.clone())
166-
.expect("Could not deserialize medatada.nanos");
167-
let ledger_metadata = LedgerMetadata {
168-
curve: nanos_metadata.curve,
169-
path: nanos_metadata.path,
170-
flags: nanos_metadata.flags,
171-
name: nanos_metadata.name,
172-
};
173-
174-
let device_metadata = DeviceMetadata {
175-
icon: match device {
176-
Device::Nanos => nanos_metadata.icon,
177-
_ => nanos_metadata.icon_small,
178-
},
179-
};
180-
181-
(this_pkg.clone(), ledger_metadata, device_metadata)
148+
println!("No metadata found for device: {}", device);
149+
Err(())
182150
}
183151
}
184152

@@ -263,7 +231,7 @@ fn build_app(
263231
};
264232

265233
let (this_pkg, metadata_ledger, metadata_device) =
266-
retrieve_metadata(device, None);
234+
retrieve_metadata(device, None).unwrap();
267235

268236
let package_path = this_pkg
269237
.manifest_path
@@ -291,14 +259,21 @@ fn build_app(
291259
// Retrieve real data size and SDK infos from ELF
292260
let infos = retrieve_infos(&exe_path).unwrap();
293261

294-
// Modify flags to enable BLE if targeting Nano X
295-
let flags = match device {
296-
Device::Nanos | Device::Nanosplus => metadata_ledger.flags,
297-
Device::Nanox | Device::Stax | Device::Flex => {
298-
let base = u32::from_str_radix(metadata_ledger.flags.as_str(), 16)
299-
.unwrap_or(0);
300-
format!("0x{:x}", base | 0x200)
301-
}
262+
let flags = match metadata_device.flags {
263+
Some(flags) => flags,
264+
None => match metadata_ledger.flags {
265+
Some(flags) => match device {
266+
// Modify flags to enable BLE if targeting Nano X
267+
Device::Nanos | Device::Nanosplus => flags,
268+
Device::Nanox | Device::Stax | Device::Flex => {
269+
let base =
270+
u32::from_str_radix(flags.trim_start_matches("0x"), 16)
271+
.unwrap_or(0);
272+
format!("0x{:x}", base | 0x200)
273+
}
274+
},
275+
None => String::from("0x000"),
276+
},
302277
};
303278

304279
// Target ID according to target, in case it

0 commit comments

Comments
 (0)