Added end() function to Soft Serial - fix for #463#465
Merged
Conversation
the basic trick of this commit is to allow to call the new introduced end and again begin as much as wanted, avoiding to further consume indexes in the nvic interrupt table
Contributor
There was a problem hiding this comment.
Pull Request Overview
This PR adds an end() function to the SoftwareSerial library to allow proper deinitialization of the Soft Serial interface and free its pins for GPIO use. Key changes include:
- Adding a new flag (initialized) to track the status of the SoftwareSerial instance.
- Implementing the end() function to disable IRQs and reset pin configurations.
- Introducing a new helper function (getIrqIndexFromPint) for IRQ management.
Reviewed Changes
Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
| libraries/SoftwareSerial/src/SoftwareSerial.h | Added the 'initialized' flag and declaration for end() |
| libraries/SoftwareSerial/src/SoftwareSerial.cpp | Implemented the end() function and adjusted begin() behavior |
| cores/arduino/Interrupts.cpp | Added the definition of getIrqIndexFromPint |
| cores/arduino/FspLinkIrq.h | Declared getIrqIndexFromPint for use in IRQ management |
|
|
||
| extern int attachIrq2Link(uint32_t pin, PinStatus mode); | ||
| extern int detachIrq2Link(pin_size_t pinNumber); | ||
| extern int getIrqIndexFromPint(uint32_t pin); |
There was a problem hiding this comment.
The function name 'getIrqIndexFromPint' appears to contain a typo; it may be intended to be 'getIrqIndexFromPin'.
Suggested change
| extern int getIrqIndexFromPint(uint32_t pin); | |
| extern int getIrqIndexFromPin(uint32_t pin); |
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
pennam
approved these changes
Jun 27, 2025
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR introduces the end() function to the Soft Serial library.
Using the end() function allows to use the pins allocated for the Soft Serial "manually" as GPIO.
Soft Serial can be enabled again with a new call to begin().
This PR has been tested using Soft Serial pins as GPIO (so simple Digital Input or Digital Output).
Please note that when 2 pins are allocated to Soft Serial it is not allowed to change the function associated to these pins to "complex" configuration like PWM or PIN with Irq since the needed resources are taken by Soft Serial function.