diff --git a/cores/arduino/HardwareTimer.cpp b/cores/arduino/HardwareTimer.cpp index 9a8962f819..8568fdb896 100644 --- a/cores/arduino/HardwareTimer.cpp +++ b/cores/arduino/HardwareTimer.cpp @@ -859,7 +859,7 @@ uint32_t HardwareTimer::getCaptureCompare(uint32_t channel, TimerCompareFormat_ * HERTZ_FORMAT: return value is the frequency in hertz for Capture/Compare value * @retval None */ -void HardwareTimer::setPWM(uint32_t channel, uint32_t pin, uint32_t frequency, uint32_t dutycycle, void (*PeriodCallback)(HardwareTimer *), void (*CompareCallback)(HardwareTimer *)) +void HardwareTimer::setPWM(uint32_t channel, uint32_t pin, uint32_t frequency, uint32_t dutycycle, callback_function_t PeriodCallback, callback_function_t CompareCallback) { setPWM(channel, digitalPinToPinName(pin), frequency, dutycycle, PeriodCallback, CompareCallback); } @@ -876,7 +876,7 @@ void HardwareTimer::setPWM(uint32_t channel, uint32_t pin, uint32_t frequency, u * HERTZ_FORMAT: return value is the frequency in hertz for Capture/Compare value * @retval None */ -void HardwareTimer::setPWM(uint32_t channel, PinName pin, uint32_t frequency, uint32_t dutycycle, void (*PeriodCallback)(HardwareTimer *), void (*CompareCallback)(HardwareTimer *)) +void HardwareTimer::setPWM(uint32_t channel, PinName pin, uint32_t frequency, uint32_t dutycycle, callback_function_t PeriodCallback, callback_function_t CompareCallback) { setMode(channel, TIMER_OUTPUT_COMPARE_PWM1, pin); setOverflow(frequency, HERTZ_FORMAT); @@ -908,9 +908,9 @@ void HardwareTimer::setInterruptPriority(uint32_t preemptPriority, uint32_t subP * @param callback: interrupt callback * @retval None */ -void HardwareTimer::attachInterrupt(void (*callback)(HardwareTimer *)) +void HardwareTimer::attachInterrupt(callback_function_t callback) { - if (callbacks[0] != NULL) { + if (callbacks[0]) { // Callback previously configured : do not clear neither enable IT, it is just a change of callback callbacks[0] = callback; } else { @@ -941,7 +941,7 @@ void HardwareTimer::detachInterrupt() * @param callback: interrupt callback * @retval None */ -void HardwareTimer::attachInterrupt(uint32_t channel, void (*callback)(HardwareTimer *)) +void HardwareTimer::attachInterrupt(uint32_t channel, callback_function_t callback) { int interrupt = getIT(channel); if (interrupt == -1) { @@ -951,7 +951,6 @@ void HardwareTimer::attachInterrupt(uint32_t channel, void (*callback)(HardwareT if ((channel == 0) || (channel > (TIMER_CHANNELS + 1))) { Error_Handler(); // only channel 1..4 have an interrupt } - if (callbacks[channel] != NULL) { // Callback previously configured : do not clear neither enable IT, it is just a change of callback callbacks[channel] = callback; @@ -1047,7 +1046,7 @@ void HardwareTimer::updateCallback(TIM_HandleTypeDef *htim) HardwareTimer *HT = (HardwareTimer *)(obj->__this); if (HT->callbacks[0] != NULL) { - HT->callbacks[0](HT); + HT->callbacks[0](); } } @@ -1088,7 +1087,7 @@ void HardwareTimer::captureCompareCallback(TIM_HandleTypeDef *htim) HardwareTimer *HT = (HardwareTimer *)(obj->__this); if (HT->callbacks[channel] != NULL) { - HT->callbacks[channel](HT); + HT->callbacks[channel](); } } diff --git a/cores/arduino/HardwareTimer.h b/cores/arduino/HardwareTimer.h index 4219412a53..1a3ee871f8 100644 --- a/cores/arduino/HardwareTimer.h +++ b/cores/arduino/HardwareTimer.h @@ -92,6 +92,9 @@ typedef enum { #ifdef __cplusplus +#include +using callback_function_t = std::function; + /* Class --------------------------------------------------------*/ class HardwareTimer { public: @@ -109,8 +112,8 @@ class HardwareTimer { void setOverflow(uint32_t val, TimerFormat_t format = TICK_FORMAT); // set AutoReload register depending on format provided uint32_t getOverflow(TimerFormat_t format = TICK_FORMAT); // return overflow depending on format provided - void setPWM(uint32_t channel, PinName pin, uint32_t frequency, uint32_t dutycycle, void (*PeriodCallback)(HardwareTimer *) = NULL, void (*CompareCallback)(HardwareTimer *) = NULL); // Set all in one command freq in HZ, Duty in percentage. Including both interrup. - void setPWM(uint32_t channel, uint32_t pin, uint32_t frequency, uint32_t dutycycle, void (*PeriodCallback)(HardwareTimer *) = NULL, void (*CompareCallback)(HardwareTimer *) = NULL); + void setPWM(uint32_t channel, PinName pin, uint32_t frequency, uint32_t dutycycle, callback_function_t PeriodCallback = nullptr, callback_function_t CompareCallback = nullptr); // Set all in one command freq in HZ, Duty in percentage. Including both interrup. + void setPWM(uint32_t channel, uint32_t pin, uint32_t frequency, uint32_t dutycycle, callback_function_t PeriodCallback = nullptr, callback_function_t CompareCallback = nullptr); void setCount(uint32_t val, TimerFormat_t format = TICK_FORMAT); // set timer counter to value 'val' depending on format provided uint32_t getCount(TimerFormat_t format = TICK_FORMAT); // return current counter value of timer depending on format provided @@ -128,14 +131,13 @@ class HardwareTimer { void setInterruptPriority(uint32_t preemptPriority, uint32_t subPriority); // set interrupt priority //Add interrupt to period update - void attachInterrupt(void (*handler)(HardwareTimer *)); // Attach interrupt callback which will be called upon update event (timer rollover) + void attachInterrupt(callback_function_t callback); // Attach interrupt callback which will be called upon update event (timer rollover) void detachInterrupt(); // remove interrupt callback which was attached to update event bool hasInterrupt(); //returns true if a timer rollover interrupt has already been set //Add interrupt to capture/compare channel - void attachInterrupt(uint32_t channel, void (*handler)(HardwareTimer *)); // Attach interrupt callback which will be called upon compare match event of specified channel + void attachInterrupt(uint32_t channel, callback_function_t callback); // Attach interrupt callback which will be called upon compare match event of specified channel void detachInterrupt(uint32_t channel); // remove interrupt callback which was attached to compare match event of specified channel bool hasInterrupt(uint32_t channel); //returns true if an interrupt has already been set on the channel compare match - void timerHandleDeinit(); // Timer deinitialization // Refresh() is usefull while timer is running after some registers update @@ -158,7 +160,7 @@ class HardwareTimer { private: TimerModes_t _ChannelMode[TIMER_CHANNELS]; timerObj_t _timerObj; - void (*callbacks[1 + TIMER_CHANNELS])(HardwareTimer *); //Callbacks: 0 for update, 1-4 for channels. (channel5/channel6, if any, doesn't have interrupt) + callback_function_t callbacks[1 + TIMER_CHANNELS]; //Callbacks: 0 for update, 1-4 for channels. (channel5/channel6, if any, doesn't have interrupt) }; extern timerObj_t *HardwareTimer_Handle[TIMER_NUM]; diff --git a/cores/arduino/Tone.cpp b/cores/arduino/Tone.cpp index cb16254d75..7c475e50f9 100644 --- a/cores/arduino/Tone.cpp +++ b/cores/arduino/Tone.cpp @@ -32,7 +32,7 @@ typedef struct { } timerPinInfo_t; static void timerTonePinInit(PinName p, uint32_t frequency, uint32_t duration); -static void tonePeriodElapsedCallback(HardwareTimer *HT); +static void tonePeriodElapsedCallback(); static timerPinInfo_t TimerTone_pinInfo = {NC, 0}; static HardwareTimer *TimerTone = NULL; @@ -41,9 +41,8 @@ static HardwareTimer *TimerTone = NULL; * @param htim : timer handle * @retval None */ -static void tonePeriodElapsedCallback(HardwareTimer *HT) +static void tonePeriodElapsedCallback() { - UNUSED(HT); GPIO_TypeDef *port = get_GPIO_Port(STM_PORT(TimerTone_pinInfo.pin)); if (port != NULL) { diff --git a/libraries/Servo/src/stm32/Servo.cpp b/libraries/Servo/src/stm32/Servo.cpp index 2202d2a6be..9bf4bb047d 100644 --- a/libraries/Servo/src/stm32/Servo.cpp +++ b/libraries/Servo/src/stm32/Servo.cpp @@ -40,9 +40,8 @@ uint8_t ServoCount = 0; // the total number o /************ static functions common to all instances ***********************/ volatile uint32_t CumulativeCountSinceRefresh = 0; -static void Servo_PeriodElapsedCallback(HardwareTimer *HT) +static void Servo_PeriodElapsedCallback() { - UNUSED(HT); // Only 1 timer used timer16_Sequence_t timer_id = _timer1; diff --git a/libraries/SoftwareSerial/src/SoftwareSerial.cpp b/libraries/SoftwareSerial/src/SoftwareSerial.cpp index 61fdbac6e1..da89fdd7c5 100644 --- a/libraries/SoftwareSerial/src/SoftwareSerial.cpp +++ b/libraries/SoftwareSerial/src/SoftwareSerial.cpp @@ -290,9 +290,8 @@ inline void SoftwareSerial::recv() // /* static */ -inline void SoftwareSerial::handleInterrupt(HardwareTimer *timer) +inline void SoftwareSerial::handleInterrupt() { - UNUSED(timer); if (active_in) { active_in->recv(); } diff --git a/libraries/SoftwareSerial/src/SoftwareSerial.h b/libraries/SoftwareSerial/src/SoftwareSerial.h index 6e9eb8fef4..c569fc2ec6 100644 --- a/libraries/SoftwareSerial/src/SoftwareSerial.h +++ b/libraries/SoftwareSerial/src/SoftwareSerial.h @@ -84,7 +84,7 @@ class SoftwareSerial : public Stream { void setRX(); void setSpeed(uint32_t speed); void setRXTX(bool input); - static void handleInterrupt(HardwareTimer *timer); + static void handleInterrupt(); public: // public methods