Skip to content

Commit d27b2c6

Browse files
authored
Merge pull request #31 from makermelissa/deepsleep
Added deep and light sleep functions
2 parents 31c664c + e00c43d commit d27b2c6

File tree

4 files changed

+87
-0
lines changed

4 files changed

+87
-0
lines changed

adafruit_magtag/magtag.py

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,13 @@ def __init__(
9292
self._json_path = None
9393
self.json_path = json_path
9494

95+
try:
96+
import alarm # pylint: disable=import-outside-toplevel
97+
98+
self._alarm = alarm
99+
except ImportError:
100+
self._alarm = None
101+
95102
self._regexp_path = regexp_path
96103

97104
self.splash = self.graphics.splash
@@ -293,6 +300,59 @@ def set_text(self, val, index=0, auto_refresh=True):
293300
if auto_refresh:
294301
self.refresh()
295302

303+
def exit_and_deep_sleep(self, sleep_time):
304+
"""
305+
Stops the current program and enters deep sleep. The program is restarted from the beginning
306+
after a certain period of time.
307+
308+
See https://circuitpython.readthedocs.io/en/latest/shared-bindings/alarm/index.html for more
309+
details.
310+
311+
:param float sleep_time: The amount of time to sleep in seconds
312+
313+
"""
314+
if self._alarm:
315+
self.peripherals.neopixel_disable = True
316+
self.peripherals.speaker_disable = True
317+
pause = self._alarm.time.TimeAlarm(
318+
monotonic_time=time.monotonic() + sleep_time
319+
)
320+
self._alarm.exit_and_deep_sleep_until_alarms(pause)
321+
else:
322+
raise NotImplementedError(
323+
"Deep sleep not supported. Make sure you have the latest CircuitPython."
324+
)
325+
326+
def enter_light_sleep(self, sleep_time):
327+
"""
328+
Enter light sleep and resume the program after a certain period of time.
329+
330+
See https://circuitpython.readthedocs.io/en/latest/shared-bindings/alarm/index.html for more
331+
details.
332+
333+
:param float sleep_time: The amount of time to sleep in seconds
334+
335+
"""
336+
if self._alarm:
337+
neopixel_values = self.peripherals.neopixels
338+
neopixel_state = self.peripherals.neopixel_disable
339+
self.peripherals.neopixel_disable = True
340+
speaker_state = self.peripherals.speaker_disable
341+
self.peripherals.speaker_disable = True
342+
pause = self._alarm.time.TimeAlarm(
343+
monotonic_time=time.monotonic() + sleep_time
344+
)
345+
self._alarm.light_sleep_until_alarms(pause)
346+
self.peripherals.neopixel_disable = neopixel_state
347+
self.peripherals.speaker_disable = speaker_state
348+
for i in range(4):
349+
self.peripherals.neopixels[i] = neopixel_values[i]
350+
gc.collect()
351+
else:
352+
raise NotImplementedError(
353+
"Hardware light sleep not supported. Make sure you have the latest CircuitPython."
354+
)
355+
296356
def get_local_time(self, location=None):
297357
"""Accessor function for get_local_time()"""
298358
return self.network.get_local_time(location=location)

adafruit_magtag/network.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -544,3 +544,11 @@ def fetch_data(
544544
return values[0]
545545

546546
return values
547+
548+
@property
549+
def enabled(self):
550+
"""
551+
Return whether the WiFi is enabled
552+
553+
"""
554+
return self._wifi.enabled

adafruit_magtag/peripherals.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,17 @@ def neopixel_disable(self):
9696
def neopixel_disable(self, value):
9797
self._neopixel_disable.value = value
9898

99+
@property
100+
def speaker_disable(self):
101+
"""
102+
Enable or disable the speaker for power savings
103+
"""
104+
return not self._speaker_enable.value
105+
106+
@speaker_disable.setter
107+
def speaker_disable(self, value):
108+
self._speaker_enable.value = not value
109+
99110
@property
100111
def button_a_pressed(self):
101112
"""

adafruit_magtag/wifi_module.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,3 +93,11 @@ def ip_address(self):
9393
9494
"""
9595
return wifi.radio.ipv4_address
96+
97+
@property
98+
def enabled(self):
99+
"""
100+
Return whether the WiFi Radio is enabled
101+
102+
"""
103+
return wifi.radio.enabled

0 commit comments

Comments
 (0)