Skip to content

Bump pillow from 8.1.1 to 10.3.0 in /src #28

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 26 commits into
base: Current
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
c4b6f53
squash!
NikolaRHristov Apr 14, 2024
dc773ea
squash!
NikolaRHristov Apr 15, 2024
a97950f
squash!
NikolaRHristov Apr 15, 2024
692d515
squash!
NikolaRHristov Apr 15, 2024
f347d7d
Bump black from 19.10b0 to 24.3.0 in /Source
dependabot[bot] Apr 15, 2024
8d85543
Bump pillow from 8.1.1 to 10.3.0 in /Source
dependabot[bot] Apr 15, 2024
f05e32b
Merge pull request #24 from CodeEditorLand/dependabot/pip/Source/blac…
github-actions[bot] Apr 15, 2024
0eb8745
Merge pull request #29 from CodeEditorLand/dependabot/pip/Source/pill…
github-actions[bot] Apr 15, 2024
40c5946
squash!
NikolaRHristov Apr 15, 2024
47ea161
squash!
NikolaRHristov Apr 15, 2024
eb2abbe
squash!
NikolaRHristov Apr 15, 2024
d4a29b7
squash!
NikolaRHristov Apr 15, 2024
a7caff6
squash!
NikolaRHristov Apr 15, 2024
af751e2
Merge branch 'Current' of ssh://github.com/CodeEditorLand/LandPythonD…
NikolaRHristov Apr 15, 2024
baa61e6
squash!
NikolaRHristov Apr 16, 2024
8f216da
squash!
NikolaRHristov Apr 16, 2024
199ef5e
squash!
NikolaRHristov Apr 17, 2024
fd7de85
squash!
NikolaRHristov Apr 17, 2024
88d322d
squash!
NikolaRHristov Apr 17, 2024
f2179a0
squash!
NikolaRHristov Apr 19, 2024
1f88eed
squash!
NikolaRHristov Apr 19, 2024
537a7a6
squash!
NikolaRHristov Apr 20, 2024
427f2af
squash!
NikolaRHristov Apr 20, 2024
630d1ac
squash!
NikolaRHristov Apr 20, 2024
f710809
Merge remote-tracking branch 'Parent/dev' into Current
NikolaRHristov Apr 23, 2024
805e0be
Bump pillow from 8.1.1 to 10.3.0 in /src
dependabot[bot] Apr 23, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions Source/adafruit_circuitplayground/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# added compatibility for new import structure in CircuitPython
# https://github.com/adafruit/Adafruit_CircuitPython_CircuitPlayground/pull/79

from .express import cpx as cp
78 changes: 78 additions & 0 deletions Source/adafruit_circuitplayground/constants.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT license.


class EXPRESS_STATE:
BUTTON_A = "button_a"
BUTTON_B = "button_b"
ACCELERATION = "acceleration"
BRIGHTNESS = "brightness"
PIXELS = "pixels"
RED_LED = "red_led"
SWITCH = "switch"
TEMPERATURE = "temperature"
LIGHT = "light"
MOTION_X = "motion_x"
MOTION_Y = "motion_y"
MOTION_Z = "motion_z"
TOUCH = "touch"
SHAKE = "shake"
DETECT_TAPS = "detect_taps"


ASSIGN_PIXEL_TYPE_ERROR = (
"The pixel color value type should be tuple, list or hexadecimal."
)

BRIGHTNESS_RANGE_ERROR = "The brightness value should be a number between 0 and 1."

CPX = "CPX"

INDEX_ERROR = (
"The index is not a valid number, you can access the Neopixels from 0 to 9."
)

MAC_OS = "darwin"

NOT_IMPLEMENTED_ERROR = "This method is not implemented by the simulator"

NOT_SUITABLE_FILE_ERROR = (
"Your .wav file is not suitable for the Circuit Playground Express."
)

PIXEL_RANGE_ERROR = (
"The pixel hexadicimal color value should be in range #000000 and #FFFFFF."
)

VALID_PIXEL_ASSIGN_ERROR = "The pixel color value should be a tuple with three values between 0 and 255 or a hexadecimal color between 0x000000 and 0xFFFFFF."

ERROR_SENDING_EVENT = "Error trying to send event to the process : "

TIME_DELAY = 0.03


EVENTS_BUTTON_PRESS = [
EXPRESS_STATE.BUTTON_A,
EXPRESS_STATE.BUTTON_B,
EXPRESS_STATE.SWITCH,
]
EVENTS_SENSOR_CHANGED = [
EXPRESS_STATE.TEMPERATURE,
EXPRESS_STATE.LIGHT,
EXPRESS_STATE.MOTION_X,
EXPRESS_STATE.MOTION_Y,
EXPRESS_STATE.MOTION_Z,
]

ALL_EXPECTED_INPUT_EVENTS = [
EXPRESS_STATE.BUTTON_A,
EXPRESS_STATE.BUTTON_B,
EXPRESS_STATE.SWITCH,
EXPRESS_STATE.TEMPERATURE,
EXPRESS_STATE.LIGHT,
EXPRESS_STATE.SHAKE,
EXPRESS_STATE.MOTION_X,
EXPRESS_STATE.MOTION_Y,
EXPRESS_STATE.MOTION_Z,
EXPRESS_STATE.TOUCH,
]
215 changes: 215 additions & 0 deletions Source/adafruit_circuitplayground/express.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,215 @@
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT license.

import json
import sys
import os
import playsound

from common import utils
from common.telemetry import telemetry_py
from common.telemetry_events import TelemetryEvent
from .pixel import Pixel
from . import constants as CONSTANTS
from collections import namedtuple
import common

Acceleration = namedtuple(CONSTANTS.EXPRESS_STATE.ACCELERATION, ["x", "y", "z"])


class Express:
def __init__(self):
# State in the Python process
self.__state = {}
self.__state[CONSTANTS.EXPRESS_STATE.BRIGHTNESS] = 1.0
self.__state[CONSTANTS.EXPRESS_STATE.BUTTON_A] = False
self.__state[CONSTANTS.EXPRESS_STATE.BUTTON_B] = False
self.__state[CONSTANTS.EXPRESS_STATE.PIXELS] = [
(0, 0, 0),
(0, 0, 0),
(0, 0, 0),
(0, 0, 0),
(0, 0, 0),
(0, 0, 0),
(0, 0, 0),
(0, 0, 0),
(0, 0, 0),
(0, 0, 0),
]
self.__state[CONSTANTS.EXPRESS_STATE.RED_LED] = False
self.__state[CONSTANTS.EXPRESS_STATE.SWITCH] = False
self.__state[CONSTANTS.EXPRESS_STATE.TEMPERATURE] = 0
self.__state[CONSTANTS.EXPRESS_STATE.LIGHT] = 0
self.__state[CONSTANTS.EXPRESS_STATE.MOTION_X] = 0
self.__state[CONSTANTS.EXPRESS_STATE.MOTION_Y] = 0
self.__state[CONSTANTS.EXPRESS_STATE.MOTION_Z] = 0
self.__state[CONSTANTS.EXPRESS_STATE.TOUCH] = [False] * 7
self.__state[CONSTANTS.EXPRESS_STATE.SHAKE] = False
self.__state[CONSTANTS.EXPRESS_STATE.DETECT_TAPS] = 0
self.pixels = Pixel(self.__state)

@property
def acceleration(self):
telemetry_py.send_telemetry(TelemetryEvent.CPX_API_ACCELERATION)
return Acceleration(
self.__state[CONSTANTS.EXPRESS_STATE.MOTION_X],
self.__state[CONSTANTS.EXPRESS_STATE.MOTION_Y],
self.__state[CONSTANTS.EXPRESS_STATE.MOTION_Z],
)

@property
def button_a(self):
telemetry_py.send_telemetry(TelemetryEvent.CPX_API_BUTTON_A)
return self.__state[CONSTANTS.EXPRESS_STATE.BUTTON_A]

@property
def button_b(self):
telemetry_py.send_telemetry(TelemetryEvent.CPX_API_BUTTON_B)
return self.__state[CONSTANTS.EXPRESS_STATE.BUTTON_B]

@property
def detect_taps(self):
telemetry_py.send_telemetry(TelemetryEvent.CPX_API_DETECT_TAPS)
return self.__state[CONSTANTS.EXPRESS_STATE.DETECT_TAPS]

@detect_taps.setter
def detect_taps(self, value):
telemetry_py.send_telemetry(TelemetryEvent.CPX_API_DETECT_TAPS)
value_int = int(value)
self.__state[CONSTANTS.EXPRESS_STATE.DETECT_TAPS] = (
value_int if (value_int == 1 or value_int == 2) else 1
)

@property
def tapped(self):
""" Not Implemented!
"""
telemetry_py.send_telemetry(TelemetryEvent.CPX_API_TAPPED)
utils.print_for_unimplemented_functions("tapped")

@property
def red_led(self):
telemetry_py.send_telemetry(TelemetryEvent.CPX_API_RED_LED)
return self.__state[CONSTANTS.EXPRESS_STATE.RED_LED]

@red_led.setter
def red_led(self, value):
telemetry_py.send_telemetry(TelemetryEvent.CPX_API_RED_LED)
self.__state[CONSTANTS.EXPRESS_STATE.RED_LED] = bool(value)
self.__show()

@property
def switch(self):
telemetry_py.send_telemetry(TelemetryEvent.CPX_API_SWITCH)
return self.__state[CONSTANTS.EXPRESS_STATE.SWITCH]

@property
def temperature(self):
telemetry_py.send_telemetry(TelemetryEvent.CPX_API_TEMPERATURE)
return self.__state[CONSTANTS.EXPRESS_STATE.TEMPERATURE]

@property
def light(self):
telemetry_py.send_telemetry(TelemetryEvent.CPX_API_LIGHT)
return self.__state[CONSTANTS.EXPRESS_STATE.LIGHT]

def __show(self):
if utils.debug_mode:
common.debugger_communication_client.debug_send_to_simulator(
self.__state, CONSTANTS.CPX
)
else:
utils.send_to_simulator(self.__state, CONSTANTS.CPX)

def __touch(self, i):
telemetry_py.send_telemetry(TelemetryEvent.CPX_API_TOUCH)
return self.__state[CONSTANTS.EXPRESS_STATE.TOUCH][i - 1]

@property
def touch_A1(self):
return self.__touch(1)

@property
def touch_A2(self):
return self.__touch(2)

@property
def touch_A3(self):
return self.__touch(3)

@property
def touch_A4(self):
return self.__touch(4)

@property
def touch_A5(self):
return self.__touch(5)

@property
def touch_A6(self):
return self.__touch(6)

@property
def touch_A7(self):
return self.__touch(7)

def adjust_touch_threshold(self, adjustment):
"""Not implemented!
The CPX Simulator doesn't use capacitive touch threshold.
"""
telemetry_py.send_telemetry(TelemetryEvent.CPX_API_ADJUST_THRESHOLD)
utils.print_for_unimplemented_functions(Express.adjust_touch_threshold.__name__)

def shake(self, shake_threshold=30):
telemetry_py.send_telemetry(TelemetryEvent.CPX_API_SHAKE)
return self.__state[CONSTANTS.EXPRESS_STATE.SHAKE]

def play_file(self, file_name):
telemetry_py.send_telemetry(TelemetryEvent.CPX_API_PLAY_FILE)
file_name = utils.remove_leading_slashes(file_name)
abs_path_parent_dir = os.path.abspath(
os.path.join(utils.abs_path_to_user_file, os.pardir)
)
abs_path_wav_file = os.path.normpath(
os.path.join(abs_path_parent_dir, file_name)
)
abs_path_wav_file = utils.escape_if_OSX(abs_path_wav_file)

if sys.implementation.version[0] >= 3:
if file_name.endswith(".wav"):
try:
playsound.playsound(abs_path_wav_file)
except:
# TODO TASK: 29054 Verfication of a "valid" .wav file
raise EnvironmentError(CONSTANTS.NOT_SUITABLE_FILE_ERROR)
else:
raise TypeError(file_name + " is not a path to a .wav file.")
else:
raise NotImplementedError("Please use Python 3 or higher.")

def play_tone(self, frequency, duration):
""" Not Implemented!
"""
telemetry_py.send_telemetry(TelemetryEvent.CPX_API_PLAY_TONE)
utils.print_for_unimplemented_functions(Express.play_tone.__name__)

def start_tone(self, frequency):
""" Not Implemented!
"""
telemetry_py.send_telemetry(TelemetryEvent.CPX_API_START_TONE)
utils.print_for_unimplemented_functions(Express.start_tone.__name__)

def stop_tone(self):
""" Not Implemented!
"""
telemetry_py.send_telemetry(TelemetryEvent.CPX_API_STOP_TONE)
utils.print_for_unimplemented_functions(Express.stop_tone.__name__)

def update_state(self, new_state):
for event in CONSTANTS.ALL_EXPECTED_INPUT_EVENTS:
self._Express__state[event] = new_state.get(
event, self._Express__state[event]
)


cpx = Express()
26 changes: 26 additions & 0 deletions Source/adafruit_circuitplayground/locale/en/LC_MESSAGES/express.po
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-08-21 13:35-0700\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"

#: express.py:190
msgid " is not a path to a .wav file."
msgstr ""

#: express.py:192
msgid "Please use Python 3 or higher."
msgstr ""
26 changes: 26 additions & 0 deletions Source/adafruit_circuitplayground/locale/express.pot
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-08-21 13:35-0700\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"

#: express.py:190
msgid " is not a path to a .wav file."
msgstr ""

#: express.py:192
msgid "Please use Python 3 or higher."
msgstr ""
Loading