Workaround for Gen 3 devices not connecting to the cloud in non-automatic threaded mode #2152
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.
Problem
The system loop on Gen 3 modifies the value of the
SPARK_WLAN_SLEEP
flag, which may preventParticle.connect()
from initiating a connection to the cloud when the app is running in threaded mode.Solution
Do not call
network_off()
in the system loop ifSPARK_WLAN_SLEEP
is set but there's no active or ongoing network connection.Note that this is more a workaround rather than a solution. Ideally, we need to refactor the system state management logic so that
SPARK_WLAN_SLEEP
(or its equivalent) only controls the "administrative" state of the networking subsystem, i.e. whether the user wants networking to be enabled, rather than both the administrative state and the actual one.Steps to Test
The easiest way to reproduce this issue is to introduce artificial delays in the system loop:
develop
, build and flash the system firmware and the example application to a Gen 3 device.Particle.connect()
has been called insetup()
.Example App
References