Skip to content

Commit

Permalink
Merge pull request #44 from KaiseiYokoyama/dev/0.4.1
Browse files Browse the repository at this point in the history
Dev/0.4.1
  • Loading branch information
KaiseiYokoyama authored May 3, 2020
2 parents 11be1f2 + b066252 commit ce3480a
Show file tree
Hide file tree
Showing 10 changed files with 52 additions and 63 deletions.
8 changes: 3 additions & 5 deletions examples/home_light.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,15 @@ fn main() -> JoyConResult<()> {

let manager =
JoyConManager::get_instance();
let (managed_devices, new_devices) = {
let devices = {
let lock = manager.lock();
match lock {
Ok(manager) =>
(manager.managed_devices(), manager.new_devices()),
Ok(manager) => manager.new_devices(),
Err(_) => unreachable!(),
}
};

managed_devices.into_iter()
.chain(new_devices)
devices.iter()
.inspect(|d| {
let lock = d.lock();
let device = match lock {
Expand Down
9 changes: 4 additions & 5 deletions examples/player_lights.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,23 +9,22 @@ fn main() -> JoyConResult<()> {

let manager =
JoyConManager::get_instance();
let (managed_devices, new_devices) = {
let devices = {
let lock = manager.lock();
match lock {
Ok(manager) =>
(manager.managed_devices(), manager.new_devices()),
Ok(manager) => manager.new_devices(),
Err(_) => unreachable!(),
}
};

managed_devices.into_iter()
.chain(new_devices)
devices.iter()
.inspect(|d| {
let lock = d.lock();
let device = match lock {
Ok(device) => device,
Err(e) => e.into_inner(),
};
dbg!(&device);
let hid_device: JoyConResult<&HidDevice> = device.deref().try_into();
if let Ok(hid_device) = hid_device {
println!("{:?}", hid_device.get_product_string())
Expand Down
8 changes: 3 additions & 5 deletions examples/rumble.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,15 @@ fn main() -> JoyConResult<()> {

let manager =
JoyConManager::get_instance();
let (managed_devices, new_devices) = {
let devices = {
let lock = manager.lock();
match lock {
Ok(manager) =>
(manager.managed_devices(), manager.new_devices()),
Ok(manager) => manager.new_devices(),
Err(_) => unreachable!(),
}
};

managed_devices.into_iter()
.chain(new_devices)
devices.iter()
.inspect(|d| {
let lock = d.lock();
let device = match lock {
Expand Down
7 changes: 3 additions & 4 deletions examples/scan_for_joycons.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,15 @@ fn main() -> JoyConResult<()> {
// First, connect your Joy-Cons to your computer!

let manager = JoyConManager::get_instance();
let (managed_devices, new_devices) = {
let devices = {
let lock = manager.lock();
match lock {
Ok(m) => (m.managed_devices(), m.new_devices()),
Ok(m) => m.new_devices(),
Err(_) => unreachable!(),
}
};

managed_devices.into_iter()
.chain(new_devices)
devices.iter()
.try_for_each::<_, JoyConResult<()>>(|d| {
if let Ok(device) = d.lock() {
let device: &HidDevice = device.deref().try_into()?;
Expand Down
7 changes: 3 additions & 4 deletions examples/simple_hid_report.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,15 @@ fn main() -> JoyConResult<()> {

let manager = JoyConManager::get_instance();

let (managed_devices, new_devices) = {
let devices = {
let lock = manager.lock();
match lock {
Ok(manager) => (manager.managed_devices(), manager.new_devices()),
Ok(manager) => manager.new_devices(),
Err(_) => unreachable!(),
}
};

managed_devices.into_iter()
.chain(new_devices)
devices.iter()
.try_for_each::<_, JoyConResult<()>>(|d| {
let driver = SimpleJoyConDriver::new(&d)?;

Expand Down
7 changes: 3 additions & 4 deletions examples/standard_full_report.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,15 @@ fn main() -> JoyConResult<()> {

let manager = JoyConManager::get_instance();

let (managed_devices, new_devices) = {
let devices = {
let lock = manager.lock();
match lock {
Ok(manager) => (manager.managed_devices(), manager.new_devices()),
Ok(manager) => manager.new_devices(),
Err(_) => unreachable!(),
}
};

managed_devices.into_iter()
.chain(new_devices)
devices.iter()
.try_for_each::<_, JoyConResult<()>>(|d| {
let driver = SimpleJoyConDriver::new(&d)?;
let standard_full_mode = StandardFullMode::new(driver)?;
Expand Down
29 changes: 12 additions & 17 deletions src/joycon/driver.rs
Original file line number Diff line number Diff line change
Expand Up @@ -72,17 +72,15 @@ pub enum Rotation {
/// use joycon_rs::prelude::{*, joycon_features::JoyConFeature};
///
/// let manager = JoyConManager::get_instance();
/// let (managed_devices, new_devices) = {
/// let devices = {
/// let lock = manager.lock();
/// match lock {
/// Ok(manager) =>
/// (manager.managed_devices(), manager.new_devices()),
/// Ok(manager) => manager.new_devices(),
/// Err(_) => unreachable!(),
/// }
/// };
///
/// managed_devices.into_iter()
/// .chain(new_devices)
/// devices.iter()
/// .try_for_each::<_, JoyConResult<()>>(|d| {
/// let mut driver = SimpleJoyConDriver::new(&d)?;
///
Expand Down Expand Up @@ -357,16 +355,15 @@ mod global_packet_number {
///
/// let manager = JoyConManager::get_instance();
///
/// let (managed_devices, new_devices) = {
/// let devices = {
/// let lock = manager.lock();
/// match lock {
/// Ok(manager) => (manager.managed_devices(), manager.new_devices()),
/// Ok(manager) => manager.new_devices(),
/// Err(_) => return,
/// }
/// };
///
/// managed_devices.into_iter()
/// .chain(new_devices)
/// devices.iter()
/// .try_for_each::<_,JoyConResult<()>>(|device| {
/// let mut driver = SimpleJoyConDriver::new(&device)?;
///
Expand Down Expand Up @@ -1239,16 +1236,15 @@ pub mod input_report_mode {
///
/// let manager = JoyConManager::get_instance();
///
/// let (managed_devices, new_devices) = {
/// let devices = {
/// let lock = manager.lock();
/// match lock {
/// Ok(manager) => (manager.managed_devices(), manager.new_devices()),
/// Ok(manager) => manager.new_devices(),
/// Err(_) => return,
/// }
/// };
///
/// managed_devices.into_iter()
/// .chain(new_devices)
/// devices.iter()
/// .flat_map(|device| SimpleJoyConDriver::new(&device))
/// .try_for_each::<_, JoyConResult<()>>(|driver| {
/// let sender = sender.clone();
Expand Down Expand Up @@ -1469,16 +1465,15 @@ pub mod input_report_mode {
///
/// let manager = JoyConManager::get_instance();
///
/// let (managed_devices, new_devices) = {
/// let devices = {
/// let lock = manager.lock();
/// match lock {
/// Ok(manager) => (manager.managed_devices(), manager.new_devices()),
/// Ok(manager) => manager.new_devices(),
/// Err(_) => return,
/// }
/// };
///
/// managed_devices.into_iter()
/// .chain(new_devices)
/// devices.iter()
/// .flat_map(|d| SimpleJoyConDriver::new(&d))
/// .try_for_each::<_, JoyConResult<()>>(|driver| {
/// let sender = sender.clone();
Expand Down
19 changes: 12 additions & 7 deletions src/joycon/manager.rs
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,9 @@ impl JoyConManager {
}

fn with_interval(interval: Duration) -> JoyConResult<Arc<Mutex<Self>>> {
let (tx, rx) = crossbeam_channel::bounded(0);
let (tx, rx) =
crossbeam_channel::unbounded();
// crossbeam_channel::bounded(0);

let manager = {
let mut manager = JoyConManager {
Expand All @@ -66,7 +68,11 @@ impl JoyConManager {
};

// First scan
manager.scan()?;
manager.scan()?
.into_iter()
.for_each(|new_device| {
let _ = tx.send(new_device);
});

Arc::new(Mutex::new(manager))
};
Expand All @@ -84,7 +90,7 @@ impl JoyConManager {

// Send new devices
if let Ok(new_devices) = manager.scan() {
// If mspc channel is disconnected, end this thread.
// If mpsc channel is disconnected, end this thread.
let send_result = new_devices.into_iter()
.try_for_each::<_, Result<(), crossbeam_channel::SendError<_>>>(|new_device| {
tx.send(new_device)
Expand Down Expand Up @@ -259,16 +265,15 @@ impl JoyConManager {
///
/// let manager = JoyConManager::get_instance();
///
/// let (managed_devices, new_devices) = {
/// let devices = {
/// let lock = manager.lock();
/// match lock {
/// Ok(manager) => (manager.managed_devices(), manager.new_devices()),
/// Ok(manager) => manager.new_devices(),
/// Err(_) => return,
/// }
/// };
///
/// managed_devices.into_iter()
/// .chain(new_devices)
/// devices.iter()
/// .flat_map(|device| SimpleJoyConDriver::new(&device))
/// .try_for_each::<_, JoyConResult<()>>(|driver| {
/// let simple_hid_mode = SimpleHIDMode::new(driver)?;
Expand Down
14 changes: 6 additions & 8 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -42,16 +42,15 @@
//!
//! let manager = JoyConManager::get_instance();
//!
//! let (managed_devices, new_devices) = {
//! let devices = {
//! let lock = manager.lock();
//! match lock {
//! Ok(manager) => (manager.managed_devices(), manager.new_devices()),
//! Ok(manager) => manager.new_devices(),
//! Err(_) => return,
//! }
//! };
//!
//! managed_devices.into_iter()
//! .chain(new_devices)
//! devices.iter()
//! .flat_map(|dev| SimpleJoyConDriver::new(&dev))
//! .try_for_each::<_, JoyConResult<()>>(|driver| {
//! // Change JoyCon to Simple hid mode.
Expand Down Expand Up @@ -98,16 +97,15 @@
//!
//! let manager = JoyConManager::get_instance();
//!
//! let (managed_devices, new_devices) = {
//! let devices = {
//! let lock = manager.lock();
//! match lock {
//! Ok(manager) => (manager.managed_devices(), manager.new_devices()),
//! Ok(manager) => manager.new_devices(),
//! Err(_) => return,
//! }
//! };
//!
//! managed_devices.into_iter()
//! .chain(new_devices)
//! devices.iter()
//! .flat_map(|dev| SimpleJoyConDriver::new(&dev))
//! .try_for_each::<_, JoyConResult<()>>(|mut driver| {
//! // Set player lights
Expand Down
7 changes: 3 additions & 4 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,15 @@ fn main() -> JoyConResult<()> {
});

let manager = JoyConManager::get_instance();
let (managed_devices, new_devices) = {
let devices = {
let lock = manager.lock();
match lock {
Ok(m) => (m.managed_devices(),m.new_devices()),
Ok(m) => m.new_devices(),
Err(_) => unreachable!()
}
};

managed_devices.into_iter()
.chain(new_devices)
devices.iter()
.try_for_each::<_, JoyConResult<()>>(|d| {
let mut driver = SimpleJoyConDriver::new(&d)?;
let tx = tx.clone();
Expand Down

0 comments on commit ce3480a

Please sign in to comment.