Skip to content

Added end() function to Soft Serial - fix for #463 #465

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 3 commits into
base: main
Choose a base branch
from

Conversation

maidnl
Copy link
Contributor

@maidnl maidnl commented Apr 29, 2025

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.

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
@maidnl maidnl requested review from facchinm, pennam and Copilot April 29, 2025 10:04
Copy link

@Copilot Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

@@ -16,6 +16,7 @@ typedef enum {

extern int attachIrq2Link(uint32_t pin, PinStatus mode);
extern int detachIrq2Link(pin_size_t pinNumber);
extern int getIrqIndexFromPint(uint32_t pin);
Copy link
Preview

Copilot AI Apr 29, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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);

Copilot uses AI. Check for mistakes.

@maidnl maidnl changed the title Added end() function to Soft Serial - fix for #463 and #464 Added end() function to Soft Serial - fix for #463 Apr 29, 2025
maidnl and others added 2 commits April 29, 2025 12:08
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
@per1234 per1234 linked an issue Apr 29, 2025 that may be closed by this pull request
@per1234 per1234 added the topic: code Related to content of the project itself label Apr 29, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
topic: code Related to content of the project itself
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Arduino UNO R4 SoftwareSerial missing end()
2 participants