Skip to content
This repository was archived by the owner on Jun 5, 2019. It is now read-only.

Commit e6b9caa

Browse files
committed
Merge pull request #172 from smaillet-ms/add-per-pin-debounce
Add per pin debounce
2 parents fa4effd + ec0ea2c commit e6b9caa

File tree

4 files changed

+294
-383
lines changed

4 files changed

+294
-383
lines changed

CLR/Libraries/Windows_Devices/windows_devices_native_Windows_Devices_Gpio_GpioPin.cpp

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ HRESULT Library_windows_devices_native_Windows_Devices_Gpio_GpioPin::get_Debounc
4848
{
4949
TINYCLR_HEADER();
5050

51+
GPIO_PIN pin;
5152
CLR_INT64 value;
5253
CLR_RT_HeapBlock* pThis = stack.This(); FAULT_ON_NULL(pThis);
5354

@@ -56,7 +57,8 @@ HRESULT Library_windows_devices_native_Windows_Devices_Gpio_GpioPin::get_Debounc
5657
TINYCLR_SET_AND_LEAVE(CLR_E_OBJECT_DISPOSED);
5758
}
5859

59-
value = (CLR_INT64)::CPU_GPIO_GetDebounce() * TIME_CONVERSION__TO_MILLISECONDS;
60+
pin = (GPIO_PIN)( pThis[ FIELD__m_pinNumber ].NumericByRefConst().u4 );
61+
value = (CLR_INT64)::CPU_GPIO_GetPinDebounce( pin ) * TIME_CONVERSION__TO_MILLISECONDS;
6062
stack.SetResult_I8( value );
6163
stack.TopValue().ChangeDataType( DATATYPE_TIMESPAN );
6264

@@ -67,6 +69,7 @@ HRESULT Library_windows_devices_native_Windows_Devices_Gpio_GpioPin::set_Debounc
6769
{
6870
TINYCLR_HEADER();
6971

72+
GPIO_PIN pin;
7073
CLR_INT64 value;
7174
CLR_RT_HeapBlock* pThis = stack.This(); FAULT_ON_NULL(pThis);
7275

@@ -76,12 +79,11 @@ HRESULT Library_windows_devices_native_Windows_Devices_Gpio_GpioPin::set_Debounc
7679
}
7780

7881
value = (CLR_INT64_TEMP_CAST) stack.Arg1().NumericByRef().s8 / TIME_CONVERSION__TO_MILLISECONDS;
79-
80-
// TODO: Issue #101 Set debounce individually per pin once the HAL has that capability.
81-
//if (!::CPU_GPIO_SetDebounce( value ))
82-
//{
83-
// TINYCLR_SET_AND_LEAVE(CLR_E_INVALID_PARAMETER);
84-
//}
82+
pin = (GPIO_PIN)( pThis[ FIELD__m_pinNumber ].NumericByRefConst().u4 );
83+
if (!::CPU_GPIO_SetPinDebounce( pin, value ))
84+
{
85+
TINYCLR_SET_AND_LEAVE(CLR_E_INVALID_PARAMETER);
86+
}
8587
TINYCLR_SET_AND_LEAVE(stack.NotImplementedStub());
8688

8789
TINYCLR_NOCLEANUP();

0 commit comments

Comments
 (0)