Skip to content

Commit a2eb281

Browse files
authored
Merge branch 'main' into fontcache
2 parents 2d3ec58 + d27b2c6 commit a2eb281

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
@@ -95,6 +95,13 @@ def __init__(
9595
# Font Cache
9696
self._fonts = {}
9797

98+
try:
99+
import alarm # pylint: disable=import-outside-toplevel
100+
101+
self._alarm = alarm
102+
except ImportError:
103+
self._alarm = None
104+
98105
self._regexp_path = regexp_path
99106

100107
self.splash = self.graphics.splash
@@ -309,6 +316,59 @@ def set_text(self, val, index=0, auto_refresh=True):
309316
if auto_refresh:
310317
self.refresh()
311318

319+
def exit_and_deep_sleep(self, sleep_time):
320+
"""
321+
Stops the current program and enters deep sleep. The program is restarted from the beginning
322+
after a certain period of time.
323+
324+
See https://circuitpython.readthedocs.io/en/latest/shared-bindings/alarm/index.html for more
325+
details.
326+
327+
:param float sleep_time: The amount of time to sleep in seconds
328+
329+
"""
330+
if self._alarm:
331+
self.peripherals.neopixel_disable = True
332+
self.peripherals.speaker_disable = True
333+
pause = self._alarm.time.TimeAlarm(
334+
monotonic_time=time.monotonic() + sleep_time
335+
)
336+
self._alarm.exit_and_deep_sleep_until_alarms(pause)
337+
else:
338+
raise NotImplementedError(
339+
"Deep sleep not supported. Make sure you have the latest CircuitPython."
340+
)
341+
342+
def enter_light_sleep(self, sleep_time):
343+
"""
344+
Enter light sleep and resume the program after a certain period of time.
345+
346+
See https://circuitpython.readthedocs.io/en/latest/shared-bindings/alarm/index.html for more
347+
details.
348+
349+
:param float sleep_time: The amount of time to sleep in seconds
350+
351+
"""
352+
if self._alarm:
353+
neopixel_values = self.peripherals.neopixels
354+
neopixel_state = self.peripherals.neopixel_disable
355+
self.peripherals.neopixel_disable = True
356+
speaker_state = self.peripherals.speaker_disable
357+
self.peripherals.speaker_disable = True
358+
pause = self._alarm.time.TimeAlarm(
359+
monotonic_time=time.monotonic() + sleep_time
360+
)
361+
self._alarm.light_sleep_until_alarms(pause)
362+
self.peripherals.neopixel_disable = neopixel_state
363+
self.peripherals.speaker_disable = speaker_state
364+
for i in range(4):
365+
self.peripherals.neopixels[i] = neopixel_values[i]
366+
gc.collect()
367+
else:
368+
raise NotImplementedError(
369+
"Hardware light sleep not supported. Make sure you have the latest CircuitPython."
370+
)
371+
312372
def get_local_time(self, location=None):
313373
"""Accessor function for get_local_time()"""
314374
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)