// SPDX-License-Identifier: Apache-2.0 OR BSD-3-Clause // SPDX-FileCopyrightText: 2022 Linaro Ltd. // SPDX-FileCopyrightText: 2022 Viresh Kumar mod common; mod line_settings { use std::time::Duration; use libgpiod::line::{ self, Bias, Direction, Drive, Edge, EventClock, SettingKind, SettingVal, Value, }; #[test] fn direction() { let mut lsettings = line::Settings::new().unwrap(); assert_eq!( lsettings.prop(SettingKind::Direction).unwrap(), SettingVal::Direction(Direction::AsIs) ); lsettings.set_direction(Direction::Input).unwrap(); assert_eq!( lsettings.prop(SettingKind::Direction).unwrap(), SettingVal::Direction(Direction::Input) ); lsettings.set_direction(Direction::Output).unwrap(); assert_eq!( lsettings.prop(SettingKind::Direction).unwrap(), SettingVal::Direction(Direction::Output) ); } #[test] fn edge_detection() { let mut lsettings = line::Settings::new().unwrap(); assert_eq!( lsettings.prop(SettingKind::EdgeDetection).unwrap(), SettingVal::EdgeDetection(None) ); lsettings.set_edge_detection(Some(Edge::Both)).unwrap(); assert_eq!( lsettings.prop(SettingKind::EdgeDetection).unwrap(), SettingVal::EdgeDetection(Some(Edge::Both)) ); lsettings.set_edge_detection(Some(Edge::Rising)).unwrap(); assert_eq!( lsettings.prop(SettingKind::EdgeDetection).unwrap(), SettingVal::EdgeDetection(Some(Edge::Rising)) ); lsettings.set_edge_detection(Some(Edge::Falling)).unwrap(); assert_eq!( lsettings.prop(SettingKind::EdgeDetection).unwrap(), SettingVal::EdgeDetection(Some(Edge::Falling)) ); } #[test] fn bias() { let mut lsettings = line::Settings::new().unwrap(); assert_eq!( lsettings.prop(SettingKind::Bias).unwrap(), SettingVal::Bias(None) ); lsettings.set_bias(Some(Bias::PullDown)).unwrap(); assert_eq!( lsettings.prop(SettingKind::Bias).unwrap(), SettingVal::Bias(Some(Bias::PullDown)) ); lsettings.set_bias(Some(Bias::PullUp)).unwrap(); assert_eq!( lsettings.prop(SettingKind::Bias).unwrap(), SettingVal::Bias(Some(Bias::PullUp)) ); } #[test] fn drive() { let mut lsettings = line::Settings::new().unwrap(); assert_eq!( lsettings.prop(SettingKind::Drive).unwrap(), SettingVal::Drive(Drive::PushPull) ); lsettings.set_drive(Drive::PushPull).unwrap(); assert_eq!( lsettings.prop(SettingKind::Drive).unwrap(), SettingVal::Drive(Drive::PushPull) ); lsettings.set_drive(Drive::OpenDrain).unwrap(); assert_eq!( lsettings.prop(SettingKind::Drive).unwrap(), SettingVal::Drive(Drive::OpenDrain) ); lsettings.set_drive(Drive::OpenSource).unwrap(); assert_eq!( lsettings.prop(SettingKind::Drive).unwrap(), SettingVal::Drive(Drive::OpenSource) ); } #[test] fn active_low() { let mut lsettings = line::Settings::new().unwrap(); assert_eq!( lsettings.prop(SettingKind::ActiveLow).unwrap(), SettingVal::ActiveLow(false) ); lsettings.set_active_low(true); assert_eq!( lsettings.prop(SettingKind::ActiveLow).unwrap(), SettingVal::ActiveLow(true) ); lsettings.set_active_low(false); assert_eq!( lsettings.prop(SettingKind::ActiveLow).unwrap(), SettingVal::ActiveLow(false) ); } #[test] fn debounce_period() { let mut lsettings = line::Settings::new().unwrap(); assert_eq!( lsettings.prop(SettingKind::DebouncePeriod).unwrap(), SettingVal::DebouncePeriod(Duration::from_millis(0)) ); lsettings.set_debounce_period(Duration::from_millis(5)); assert_eq!( lsettings.prop(SettingKind::DebouncePeriod).unwrap(), SettingVal::DebouncePeriod(Duration::from_millis(5)) ); } #[test] fn event_clock() { let mut lsettings = line::Settings::new().unwrap(); assert_eq!( lsettings.prop(SettingKind::EventClock).unwrap(), SettingVal::EventClock(EventClock::Monotonic) ); lsettings.set_event_clock(EventClock::Realtime).unwrap(); assert_eq!( lsettings.prop(SettingKind::EventClock).unwrap(), SettingVal::EventClock(EventClock::Realtime) ); lsettings.set_event_clock(EventClock::Monotonic).unwrap(); assert_eq!( lsettings.prop(SettingKind::EventClock).unwrap(), SettingVal::EventClock(EventClock::Monotonic) ); } #[test] #[ignore] fn event_clock_hte() { let mut lsettings = line::Settings::new().unwrap(); assert_eq!( lsettings.prop(SettingKind::EventClock).unwrap(), SettingVal::EventClock(EventClock::Monotonic) ); lsettings.set_event_clock(EventClock::HTE).unwrap(); assert_eq!( lsettings.prop(SettingKind::EventClock).unwrap(), SettingVal::EventClock(EventClock::HTE) ); } #[test] fn output_value() { let mut lsettings = line::Settings::new().unwrap(); assert_eq!( lsettings.prop(SettingKind::OutputValue).unwrap(), SettingVal::OutputValue(Value::InActive) ); lsettings.set_output_value(Value::Active).unwrap(); assert_eq!( lsettings.prop(SettingKind::OutputValue).unwrap(), SettingVal::OutputValue(Value::Active) ); lsettings.set_output_value(Value::InActive).unwrap(); assert_eq!( lsettings.prop(SettingKind::OutputValue).unwrap(), SettingVal::OutputValue(Value::InActive) ); } }