diff --git a/variants/elbear_ace_nano/pins_arduino.h b/variants/elbear_ace_nano/pins_arduino.h index 721ece4..5c8546a 100644 --- a/variants/elbear_ace_nano/pins_arduino.h +++ b/variants/elbear_ace_nano/pins_arduino.h @@ -98,7 +98,7 @@ static inline __attribute__((always_inline)) bool digitalPinHasPWM(uint8_t p) return false; } // return true if digitalPin configured as pwm -bool digitalPinPwmIsOn(uint8_t digitalPin); +int8_t digitalPinPwmIsOn(uint8_t digitalPin); // determines which timer the pin belongs to TIMER32_TypeDef* pwmPinToTimer(uint32_t digPinNumber); // determines which timer channel the pin belongs to diff --git a/variants/elbear_ace_nano/variant.c b/variants/elbear_ace_nano/variant.c index d5f6a31..9847f3b 100644 --- a/variants/elbear_ace_nano/variant.c +++ b/variants/elbear_ace_nano/variant.c @@ -204,27 +204,27 @@ uint32_t analogInputToChannelNumber(uint32_t PinNumber) } // ---------------------- PWM ---------------------- // -// use only if digitalPinHasPWM() == true -#define PWM_PIN_TO_PORT_NUMBER(pin) (((pin==10)||(pin==11)||(pin==12)||(pin==13)) ? 1:0) - -// use only if digitalPinHasPWM() == true -// return true if digitalPin configured as pwm -__attribute__((noinline, section(".ram_text"))) bool digitalPinPwmIsOn(uint8_t digitalPin) +// return 1 if digitalPin configured as pwm and enabled, +// 0 if pwm on pin is disabled, +// -1 if pin doesn't support pwm +__attribute__((noinline, section(".ram_text"))) int8_t digitalPinPwmIsOn(uint8_t digitalPin) { if (digitalPinHasPWM(digitalPin)) { uint8_t config = 0; uint8_t pinShift = PIN_MASK_TO_PIN_NUMBER(digitalPinToBitMask(digitalPin)); - if (PWM_PIN_TO_PORT_NUMBER(digitalPin) == 0) - config = PIN_GET_PAD_CONFIG(PORT_0_CFG, pinShift); - else + if ((digitalPin==10)||(digitalPin==11)||(digitalPin==12)||(digitalPin==13)) config = PIN_GET_PAD_CONFIG(PORT_1_CFG, pinShift); + else + config = PIN_GET_PAD_CONFIG(PORT_0_CFG, pinShift); if (config == 2) - return true; + return 1; // pwm is on + else + return 0; // pwm is off } - return false; + return -1; // pin doesn't support pwm } // function is used only if digitalPinHasPWM() is true diff --git a/variants/elbear_ace_uno/pins_arduino.h b/variants/elbear_ace_uno/pins_arduino.h index 63c7b31..f6fb144 100644 --- a/variants/elbear_ace_uno/pins_arduino.h +++ b/variants/elbear_ace_uno/pins_arduino.h @@ -93,7 +93,7 @@ static inline __attribute__((always_inline)) bool digitalPinHasPWM(uint8_t p) return false; } // return true if digitalPin configured as pwm -bool digitalPinPwmIsOn(uint8_t digitalPin); +int8_t digitalPinPwmIsOn(uint8_t digitalPin); // determines which timer the pin belongs to TIMER32_TypeDef* pwmPinToTimer(uint32_t digPinNumber); // determines which timer channel the pin belongs to diff --git a/variants/elbear_ace_uno/variant.c b/variants/elbear_ace_uno/variant.c index 9842331..a68047c 100644 --- a/variants/elbear_ace_uno/variant.c +++ b/variants/elbear_ace_uno/variant.c @@ -167,26 +167,27 @@ uint32_t analogInputToChannelNumber(uint32_t PinNumber) } // ---------------------- PWM ---------------------- // -// use only if digitalPinHasPWM() == true -#define PWM_PIN_TO_PORT_NUMBER(pin) (((pin==10)||(pin==11)||(pin==12)||(pin==13)) ? 1:0) - -// return true if digitalPin configured as pwm -__attribute__((noinline, section(".ram_text"))) bool digitalPinPwmIsOn(uint8_t digitalPin) +// return 1 if digitalPin configured as pwm and enabled, +// 0 if pwm on pin is disabled, +// -1 if pin doesn't support pwm +__attribute__((noinline, section(".ram_text"))) int8_t digitalPinPwmIsOn(uint8_t digitalPin) { if (digitalPinHasPWM(digitalPin)) { uint8_t config = 0; uint8_t pinShift = PIN_MASK_TO_PIN_NUMBER(digitalPinToBitMask(digitalPin)); - if (PWM_PIN_TO_PORT_NUMBER(digitalPin) == 0) - config = PIN_GET_PAD_CONFIG(PORT_0_CFG, pinShift); - else + if ((digitalPin==10)||(digitalPin==11)||(digitalPin==12)||(digitalPin==13)) config = PIN_GET_PAD_CONFIG(PORT_1_CFG, pinShift); + else + config = PIN_GET_PAD_CONFIG(PORT_0_CFG, pinShift); if (config == 2) - return true; + return 1; // pwm is on + else + return 0; // pwm is off } - return false; + return -1; // pin doesn't support pwm } // function is used only if digitalPinHasPWM() is true diff --git a/variants/elsomik/pins_arduino.h b/variants/elsomik/pins_arduino.h index 2b9176b..248d0a4 100644 --- a/variants/elsomik/pins_arduino.h +++ b/variants/elsomik/pins_arduino.h @@ -123,7 +123,7 @@ static inline __attribute__((always_inline)) bool digitalPinHasPWM(uint8_t p) return (p <= P1_15) && ((p & 0xF) < 4); } // return true if digitalPin configured as pwm -bool digitalPinPwmIsOn(uint8_t digitalPin); +int8_t digitalPinPwmIsOn(uint8_t digitalPin); // determines which timer the pin belongs to TIMER32_TypeDef* pwmPinToTimer(uint32_t digPinNumber); // determines which timer channel the pin belongs to diff --git a/variants/elsomik/variant.c b/variants/elsomik/variant.c index c5eab70..7c65693 100644 --- a/variants/elsomik/variant.c +++ b/variants/elsomik/variant.c @@ -105,27 +105,25 @@ uint32_t analogInputToChannelNumber(uint32_t PinNumber) } // ---------------------- PWM ---------------------- // -// use only if digitalPinHasPWM() == true -#define PWM_PIN_TO_PORT_NUMBER(pin) (((pin) & 16) ? 1 : 0) - -// use only if digitalPinHasPWM() == true -// return true if digitalPin configured as pwm -__attribute__((noinline, section(".ram_text"))) bool digitalPinPwmIsOn(uint8_t digitalPin) +// return 1 if digitalPin configured as pwm and enabled, +// 0 if pwm on pin is disabled, +// -1 if pin doesn't support pwm +__attribute__((noinline, section(".ram_text"))) int8_t digitalPinPwmIsOn(uint8_t digitalPin) { if (digitalPinHasPWM(digitalPin)) { uint8_t config = 0; - uint8_t pinShift = digitalPin & 0x3; - - if (PWM_PIN_TO_PORT_NUMBER(digitalPin) == 0) - config = PIN_GET_PAD_CONFIG(PORT_0_CFG, pinShift); + if ((digitalPin & 16) == 0) + config = PIN_GET_PAD_CONFIG(PORT_0_CFG, (digitalPin & 0x3)); else - config = PIN_GET_PAD_CONFIG(PORT_1_CFG, pinShift); + config = PIN_GET_PAD_CONFIG(PORT_1_CFG, (digitalPin & 0x3)); if (config == 2) - return true; + return 1; // pwm is on + else + return 0; // pwm is off } - return false; + return -1; // pin doesn't support pwm } // function is used only if digitalPinHasPWM() is true diff --git a/variants/start/pins_arduino.h b/variants/start/pins_arduino.h index 7a5fe64..dba76fe 100644 --- a/variants/start/pins_arduino.h +++ b/variants/start/pins_arduino.h @@ -136,7 +136,7 @@ static inline __attribute__((always_inline)) bool digitalPinHasPWM(uint8_t p) return (p < 32) && ((p & 0xF) < 4); } // return true if digitalPin configured as pwm -bool digitalPinPwmIsOn(uint8_t digitalPin); +int8_t digitalPinPwmIsOn(uint8_t digitalPin); // determines which timer the pin belongs to TIMER32_TypeDef* pwmPinToTimer(uint32_t digPinNumber); // determines which timer channel the pin belongs to diff --git a/variants/start/variant.c b/variants/start/variant.c index 2e83da8..08e2be2 100644 --- a/variants/start/variant.c +++ b/variants/start/variant.c @@ -101,27 +101,25 @@ uint32_t analogInputToChannelNumber(uint32_t PinNumber) } // ---------------------- PWM ---------------------- // -// use only if digitalPinHasPWM() == true -#define PWM_PIN_TO_PORT_NUMBER(pin) (((pin) & 16) ? 1 : 0) - -// use only if digitalPinHasPWM() == true -// return true if digitalPin configured as pwm -__attribute__((noinline, section(".ram_text"))) bool digitalPinPwmIsOn(uint8_t digitalPin) +// return 1 if digitalPin configured as pwm and enabled, +// 0 if pwm on pin is disabled, +// -1 if pin doesn't support pwm +__attribute__((noinline, section(".ram_text"))) int8_t digitalPinPwmIsOn(uint8_t digitalPin) { if (digitalPinHasPWM(digitalPin)) { uint8_t config = 0; - uint8_t pinShift = digitalPin & 3; - - if (PWM_PIN_TO_PORT_NUMBER(digitalPin) == 0) - config = PIN_GET_PAD_CONFIG(PORT_0_CFG, pinShift); + if ((digitalPin & 16) == 0) + config = PIN_GET_PAD_CONFIG(PORT_0_CFG, (digitalPin & 3)); else - config = PIN_GET_PAD_CONFIG(PORT_1_CFG, pinShift); + config = PIN_GET_PAD_CONFIG(PORT_1_CFG, (digitalPin & 3)); if (config == 2) - return true; + return 1; // pwm is on + else + return 0; // pwm is off } - return false; + return -1; // pin doesn't support pwm } // function is used only if digitalPinHasPWM() is true