Skip to content
This repository was archived by the owner on Nov 6, 2020. It is now read-only.

Commit 5e1a92f

Browse files
committed
test if order between hidapi and libusb matter
1 parent a7074da commit 5e1a92f

File tree

3 files changed

+12
-8
lines changed

3 files changed

+12
-8
lines changed

hw/src/ledger.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -108,14 +108,14 @@ pub struct Manager {
108108

109109
impl Manager {
110110
/// Create a new instance.
111-
pub fn new(hidapi: Arc<Mutex<hidapi::HidApi>>, exiting: Arc<AtomicBool>) -> Result<Arc<Manager>, libusb::Error> {
111+
pub fn new(hidapi: Arc<Mutex<hidapi::HidApi>>, exiting: Arc<AtomicBool>, usb_context: Arc<libusb::Context>)
112+
-> Result<Arc<Manager>, libusb::Error> {
112113
let manager = Arc::new(Manager {
113114
usb: hidapi,
114115
devices: RwLock::new(Vec::new()),
115116
key_path: RwLock::new(KeyPath::Ethereum),
116117
});
117118

118-
let usb_context = Arc::new(libusb::Context::new()?);
119119
let m = manager.clone();
120120

121121
// Subscribe to all Ledger devices
@@ -444,8 +444,9 @@ impl libusb::Hotplug for EventHandler {
444444
#[test]
445445
fn smoke() {
446446
use rustc_hex::FromHex;
447+
let usb_context = Arc::new(libusb::Context::new().expect("libusb::Context"));
447448
let hidapi = Arc::new(Mutex::new(hidapi::HidApi::new().expect("HidApi couldn't be instanced")));
448-
let manager = Manager::new(hidapi.clone(), Arc::new(AtomicBool::new(false))).expect("Ledger::Manager");
449+
let manager = Manager::new(hidapi.clone(), Arc::new(AtomicBool::new(false)), usb_context).expect("Ledger::Manager");
449450

450451
assert_eq!(try_connect_polling(manager.clone(), Duration::from_millis(500)), true);
451452

hw/src/lib.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -197,9 +197,11 @@ impl HardwareWalletManager {
197197
/// Hardware wallet constructor
198198
pub fn new() -> Result<HardwareWalletManager, Error> {
199199
let exiting = Arc::new(AtomicBool::new(false));
200+
let ledger_usb = Arc::new(libusb::Context::new()?);
201+
let trezor_usb = Arc::new(libusb::Context::new()?);
200202
let hidapi = Arc::new(Mutex::new(hidapi::HidApi::new().map_err(|e| Error::Hid(e.to_string().clone()))?));
201-
let ledger = ledger::Manager::new(hidapi.clone(), exiting.clone())?;
202-
let trezor = trezor::Manager::new(hidapi.clone(), exiting.clone())?;
203+
let ledger = ledger::Manager::new(hidapi.clone(), exiting.clone(), ledger_usb)?;
204+
let trezor = trezor::Manager::new(hidapi.clone(), exiting.clone(), trezor_usb)?;
203205

204206
Ok(HardwareWalletManager {
205207
exiting: exiting,

hw/src/trezor.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -105,15 +105,15 @@ enum HidVersion {
105105

106106
impl Manager {
107107
/// Create a new instance.
108-
pub fn new(hidapi: Arc<Mutex<hidapi::HidApi>>, exiting: Arc<AtomicBool>) -> Result<Arc<Manager>, libusb::Error> {
108+
pub fn new(hidapi: Arc<Mutex<hidapi::HidApi>>, exiting: Arc<AtomicBool>, usb_context: Arc<libusb::Context>)
109+
-> Result<Arc<Manager>, libusb::Error> {
109110
let manager = Arc::new(Manager {
110111
usb: hidapi,
111112
devices: RwLock::new(Vec::new()),
112113
locked_devices: RwLock::new(Vec::new()),
113114
key_path: RwLock::new(KeyPath::Ethereum),
114115
});
115116

116-
let usb_context = Arc::new(libusb::Context::new()?);
117117
let m = manager.clone();
118118

119119
// Subscribe to TREZOR V1
@@ -482,8 +482,9 @@ impl libusb::Hotplug for EventHandler {
482482
fn test_signature() {
483483
use ethereum_types::{H160, H256, U256};
484484

485+
let usb = Arc::new(libusb::Context::new().expect("libusb::Context"));
485486
let hidapi = Arc::new(Mutex::new(hidapi::HidApi::new().unwrap()));
486-
let manager = Manager::new(hidapi.clone(), Arc::new(AtomicBool::new(false))).unwrap();
487+
let manager = Manager::new(hidapi.clone(), Arc::new(AtomicBool::new(false)), usb).unwrap();
487488
let addr: Address = H160::from("some_addr");
488489

489490
assert_eq!(try_connect_polling(manager.clone(), Duration::from_millis(500)), true);

0 commit comments

Comments
 (0)