From 014edcea57316dfb61c0a210c4ec6f1f98a34e73 Mon Sep 17 00:00:00 2001 From: asivery Date: Thu, 28 Sep 2023 00:51:33 +0200 Subject: [PATCH] Fix RH1 track download --- minidisc-rs/src/netmd/base.rs | 12 +++++++----- minidisc-rs/src/netmd/interface.rs | 2 +- src/main.rs | 6 ++++++ 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/minidisc-rs/src/netmd/base.rs b/minidisc-rs/src/netmd/base.rs index 399b27b..7082f52 100644 --- a/minidisc-rs/src/netmd/base.rs +++ b/minidisc-rs/src/netmd/base.rs @@ -3,7 +3,7 @@ use once_cell::sync::Lazy; use rusb::{DeviceDescriptor, DeviceHandle, Direction, GlobalContext, Recipient, RequestType}; use std::error::Error; -const DEFAULT_TIMEOUT: std::time::Duration = std::time::Duration::new(1, 0); +const DEFAULT_TIMEOUT: std::time::Duration = std::time::Duration::new(9999999, 0); const STANDARD_SEND: u8 = rusb::request_type(Direction::Out, RequestType::Vendor, Recipient::Interface); @@ -11,7 +11,7 @@ const STANDARD_RECV: u8 = rusb::request_type(Direction::In, RequestType::Vendor, Recipient::Interface); const BULK_WRITE_ENDPOINT: u8 = 0x02; -const BULK_READ_ENDPOINT: u8 = 0x01; +const BULK_READ_ENDPOINT: u8 = 0x81; pub const CHUNKSIZE: u32 = 0x10000; @@ -110,7 +110,8 @@ impl NetMD { if device_type.vendor_id == model.vendor_id && device_type.product_id == model.product_id { - model.name = device_type.name.clone() + model.name = device_type.name.clone(); + break; } } @@ -273,7 +274,7 @@ impl NetMD { length: u32, chunksize: u32, ) -> Result, Box> { - let final_result: Vec = Vec::new(); + let mut final_result: Vec = Vec::new(); let mut done = 0; while done < length { @@ -285,6 +286,7 @@ impl NetMD { &mut buffer, DEFAULT_TIMEOUT, )? as u32; + final_result.extend_from_slice(&mut buffer); } Ok(final_result) @@ -293,7 +295,7 @@ impl NetMD { pub fn write_bulk(&self, data: &mut Vec) -> Result> { let written = self.device_connection - .read_bulk(BULK_WRITE_ENDPOINT, data, DEFAULT_TIMEOUT)?; + .write_bulk(BULK_WRITE_ENDPOINT, data, DEFAULT_TIMEOUT)?; Ok(written) } diff --git a/minidisc-rs/src/netmd/interface.rs b/minidisc-rs/src/netmd/interface.rs index a1ab11d..2277f46 100644 --- a/minidisc-rs/src/netmd/interface.rs +++ b/minidisc-rs/src/netmd/interface.rs @@ -1230,7 +1230,7 @@ impl NetMDInterface { ], )?; - let reply = self.send_query(&mut query, false, false)?; + let reply = self.send_query(&mut query, false, true)?; let res = scan_query(reply, "1800 080046 f0030103 300000 1001 %w %b %d".to_string())?; diff --git a/src/main.rs b/src/main.rs index e708fe3..8d92e1c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,13 +5,19 @@ use minidisc_rs::netmd::interface; use rusb; fn main() { + let mut die = false; for device in rusb::devices().unwrap().iter() { + if die { + break; + } + let device_desc = device.device_descriptor().unwrap(); let new_device = match device.open() { Ok(device) => device, Err(_) => continue, }; + die = true; println!( "Connected to Bus {:03} Device {:03} VID: {:04x}, PID: {:04x}, {:?}",