Merge pull request #1152 from tannewt/hallowing

Introduce displayio to render graphics to displays.
This commit is contained in:
Dan Halbert 2018-09-07 14:30:30 -04:00 committed by GitHub
commit 449756ef27
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
39 changed files with 2567 additions and 107 deletions

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-08-30 23:06-0700\n" "POT-Creation-Date: 2018-09-06 14:55-0700\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -231,15 +231,15 @@ msgstr ""
msgid "calibration is out of range" msgid "calibration is out of range"
msgstr "" msgstr ""
#: ports/atmel-samd/board_busses.c:39 #: ports/atmel-samd/board_busses.c:39 ports/nrf/board_busses.c:39
msgid "No default I2C bus" msgid "No default I2C bus"
msgstr "" msgstr ""
#: ports/atmel-samd/board_busses.c:64 #: ports/atmel-samd/board_busses.c:64 ports/nrf/board_busses.c:64
msgid "No default SPI bus" msgid "No default SPI bus"
msgstr "" msgstr ""
#: ports/atmel-samd/board_busses.c:91 #: ports/atmel-samd/board_busses.c:91 ports/nrf/board_busses.c:91
msgid "No default UART bus" msgid "No default UART bus"
msgstr "" msgstr ""
@ -388,12 +388,12 @@ msgstr ""
msgid "No RX pin" msgid "No RX pin"
msgstr "" msgstr ""
#: ports/atmel-samd/common-hal/busio/UART.c:284 #: ports/atmel-samd/common-hal/busio/UART.c:288
msgid "No TX pin" msgid "No TX pin"
msgstr "" msgstr ""
#: ports/atmel-samd/common-hal/digitalio/DigitalInOut.c:168 #: ports/atmel-samd/common-hal/digitalio/DigitalInOut.c:170
#: ports/nrf/common-hal/digitalio/DigitalInOut.c:158 #: ports/nrf/common-hal/digitalio/DigitalInOut.c:153
msgid "Cannot get pull while in output mode" msgid "Cannot get pull while in output mode"
msgstr "" msgstr ""
@ -426,12 +426,12 @@ msgstr ""
msgid "Failed to allocate RX buffer of %d bytes" msgid "Failed to allocate RX buffer of %d bytes"
msgstr "" msgstr ""
#: ports/atmel-samd/common-hal/pulseio/PulseIn.c:203 #: ports/atmel-samd/common-hal/pulseio/PulseIn.c:205
#: ports/esp8266/common-hal/pulseio/PulseIn.c:151 #: ports/esp8266/common-hal/pulseio/PulseIn.c:151
msgid "pop from an empty PulseIn" msgid "pop from an empty PulseIn"
msgstr "" msgstr ""
#: ports/atmel-samd/common-hal/pulseio/PulseIn.c:235 #: ports/atmel-samd/common-hal/pulseio/PulseIn.c:237
#: ports/esp8266/common-hal/pulseio/PulseIn.c:182 py/obj.c:420 #: ports/esp8266/common-hal/pulseio/PulseIn.c:182 py/obj.c:420
msgid "index out of range" msgid "index out of range"
msgstr "" msgstr ""
@ -685,11 +685,11 @@ msgstr ""
msgid "AnalogOut functionality not supported" msgid "AnalogOut functionality not supported"
msgstr "" msgstr ""
#: ports/nrf/common-hal/busio/UART.c:45 ports/nrf/common-hal/busio/UART.c:49 #: ports/nrf/common-hal/busio/UART.c:43 ports/nrf/common-hal/busio/UART.c:47
#: ports/nrf/common-hal/busio/UART.c:53 ports/nrf/common-hal/busio/UART.c:62 #: ports/nrf/common-hal/busio/UART.c:51 ports/nrf/common-hal/busio/UART.c:60
#: ports/nrf/common-hal/busio/UART.c:68 ports/nrf/common-hal/busio/UART.c:73 #: ports/nrf/common-hal/busio/UART.c:66 ports/nrf/common-hal/busio/UART.c:71
#: ports/nrf/common-hal/busio/UART.c:78 ports/nrf/common-hal/busio/UART.c:83 #: ports/nrf/common-hal/busio/UART.c:76 ports/nrf/common-hal/busio/UART.c:81
#: ports/nrf/common-hal/busio/UART.c:88 #: ports/nrf/common-hal/busio/UART.c:86
msgid "busio.UART not yet implemented" msgid "busio.UART not yet implemented"
msgstr "" msgstr ""
@ -2022,6 +2022,60 @@ msgstr ""
msgid "Unsupported pull value." msgid "Unsupported pull value."
msgstr "" msgstr ""
#: shared-bindings/displayio/Bitmap.c:84
msgid "y should be an int"
msgstr ""
#: shared-bindings/displayio/Bitmap.c:89
msgid "row buffer must be a bytearray or array of type 'b' or 'B'"
msgstr ""
#: shared-bindings/displayio/Bitmap.c:94
msgid "row data must be a buffer"
msgstr ""
#: shared-bindings/displayio/FourWire.c:55
#: shared-bindings/displayio/FourWire.c:64
msgid "displayio is a work in progress"
msgstr ""
#: shared-bindings/displayio/Group.c:65
msgid "Group must have size at least 1"
msgstr ""
#: shared-bindings/displayio/Palette.c:96
msgid "color buffer must be a bytearray or array of type 'b' or 'B'"
msgstr ""
#: shared-bindings/displayio/Palette.c:102
msgid "color buffer must be 3 bytes (RGB) or 4 bytes (RGB + pad byte)"
msgstr ""
#: shared-bindings/displayio/Palette.c:106
msgid "color must be between 0x000000 and 0xffffff"
msgstr ""
#: shared-bindings/displayio/Palette.c:110
msgid "color buffer must be a buffer or int"
msgstr ""
#: shared-bindings/displayio/Palette.c:123
#: shared-bindings/displayio/Palette.c:137
msgid "palette_index should be an int"
msgstr ""
#: shared-bindings/displayio/Sprite.c:45
msgid "position must be 2-tuple"
msgstr ""
#: shared-bindings/displayio/Sprite.c:87
msgid "unsupported bitmap type"
msgstr ""
#: shared-bindings/displayio/Sprite.c:152
msgid "palette must be displayio.Palette"
msgstr ""
#: shared-bindings/gamepad/GamePad.c:100 #: shared-bindings/gamepad/GamePad.c:100
msgid "too many arguments" msgid "too many arguments"
msgstr "" msgstr ""
@ -2236,6 +2290,18 @@ msgstr ""
msgid "Cannot transfer without MOSI and MISO pins." msgid "Cannot transfer without MOSI and MISO pins."
msgstr "" msgstr ""
#: shared-module/displayio/Bitmap.c:49
msgid "Only bit maps of 8 bit color or less are supported"
msgstr ""
#: shared-module/displayio/Bitmap.c:69
msgid "row must be packed and word aligned"
msgstr ""
#: shared-module/displayio/Group.c:39
msgid "Group full"
msgstr ""
#: shared-module/struct/__init__.c:39 #: shared-module/struct/__init__.c:39
msgid "'S' and 'O' are not supported format types" msgid "'S' and 'O' are not supported format types"
msgstr "" msgstr ""

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-08-20 09:37-0700\n" "POT-Creation-Date: 2018-09-06 14:55-0700\n"
"PO-Revision-Date: 2018-07-27 11:55-0700\n" "PO-Revision-Date: 2018-07-27 11:55-0700\n"
"Last-Translator: Sebastian Plamauer\n" "Last-Translator: Sebastian Plamauer\n"
"Language-Team: \n" "Language-Team: \n"
@ -159,7 +159,8 @@ msgstr " Ausgabe:\n"
msgid "" msgid ""
"Auto-reload is on. Simply save files over USB to run them or enter REPL to " "Auto-reload is on. Simply save files over USB to run them or enter REPL to "
"disable.\n" "disable.\n"
msgstr "Automatisches Neuladen ist aktiv. Speichere Dateien über USB um sie " msgstr ""
"Automatisches Neuladen ist aktiv. Speichere Dateien über USB um sie "
"auszuführen oder verbinde dich mit der REPL um zu deaktivieren.\n" "auszuführen oder verbinde dich mit der REPL um zu deaktivieren.\n"
#: main.c:159 #: main.c:159
@ -197,25 +198,29 @@ msgstr "CircuitPython ist abgestürzt. Ups!\n"
#: main.c:252 #: main.c:252
msgid "Please file an issue here with the contents of your CIRCUITPY drive:\n" msgid "Please file an issue here with the contents of your CIRCUITPY drive:\n"
msgstr "Bitte erstelle ein issue hier mit dem Inhalt deines CIRCUITPY-speichers:\n" msgstr ""
"Bitte erstelle ein issue hier mit dem Inhalt deines CIRCUITPY-speichers:\n"
#: main.c:255 #: main.c:255
msgid "" msgid ""
"The microcontroller's power dipped. Please make sure your power supply " "The microcontroller's power dipped. Please make sure your power supply "
"provides\n" "provides\n"
msgstr "Die Stromversorgung des Mikrocontrollers ist eingebrochen. Stelle sicher," msgstr ""
"Die Stromversorgung des Mikrocontrollers ist eingebrochen. Stelle sicher,"
"dass deine Stromversorgung\n" "dass deine Stromversorgung\n"
#: main.c:256 #: main.c:256
msgid "" msgid ""
"enough power for the whole circuit and press reset (after ejecting " "enough power for the whole circuit and press reset (after ejecting "
"CIRCUITPY).\n" "CIRCUITPY).\n"
msgstr "genug Strom für den ganzen Schaltkreis liefert und drücke reset (nach dem" msgstr ""
"sicheren Auswerfen von CIRCUITPY.)\n" "genug Strom für den ganzen Schaltkreis liefert und drücke reset (nach "
"demsicheren Auswerfen von CIRCUITPY.)\n"
#: main.c:260 #: main.c:260
msgid "Press any key to enter the REPL. Use CTRL-D to reload." msgid "Press any key to enter the REPL. Use CTRL-D to reload."
msgstr "Drücke eine Taste um dich mit der REPL zu verbinden. Drücke Strg-D zum neu" msgstr ""
"Drücke eine Taste um dich mit der REPL zu verbinden. Drücke Strg-D zum neu "
"laden" "laden"
#: main.c:415 #: main.c:415
@ -235,15 +240,15 @@ msgstr "Kalibrierung ist Schreibgeschützt"
msgid "calibration is out of range" msgid "calibration is out of range"
msgstr "Kalibrierung ist außerhalb der Reichweite" msgstr "Kalibrierung ist außerhalb der Reichweite"
#: ports/atmel-samd/board_busses.c:39 #: ports/atmel-samd/board_busses.c:39 ports/nrf/board_busses.c:39
msgid "No default I2C bus" msgid "No default I2C bus"
msgstr "Kein Standard I2C Bus" msgstr "Kein Standard I2C Bus"
#: ports/atmel-samd/board_busses.c:64 #: ports/atmel-samd/board_busses.c:64 ports/nrf/board_busses.c:64
msgid "No default SPI bus" msgid "No default SPI bus"
msgstr "Kein Standard SPI Bus" msgstr "Kein Standard SPI Bus"
#: ports/atmel-samd/board_busses.c:91 #: ports/atmel-samd/board_busses.c:91 ports/nrf/board_busses.c:91
msgid "No default UART bus" msgid "No default UART bus"
msgstr "Kein Standard UART Bus" msgstr "Kein Standard UART Bus"
@ -392,12 +397,12 @@ msgstr "Konnte UART nicht initialisieren"
msgid "No RX pin" msgid "No RX pin"
msgstr "Kein RX Pin" msgstr "Kein RX Pin"
#: ports/atmel-samd/common-hal/busio/UART.c:284 #: ports/atmel-samd/common-hal/busio/UART.c:288
msgid "No TX pin" msgid "No TX pin"
msgstr "Kein TX Pin" msgstr "Kein TX Pin"
#: ports/atmel-samd/common-hal/digitalio/DigitalInOut.c:168 #: ports/atmel-samd/common-hal/digitalio/DigitalInOut.c:170
#: ports/nrf/common-hal/digitalio/DigitalInOut.c:158 #: ports/nrf/common-hal/digitalio/DigitalInOut.c:153
msgid "Cannot get pull while in output mode" msgid "Cannot get pull while in output mode"
msgstr "Pull up im Ausgabemodus nicht möglich" msgstr "Pull up im Ausgabemodus nicht möglich"
@ -430,12 +435,12 @@ msgstr "EXTINT Kanal wird benutzt"
msgid "Failed to allocate RX buffer of %d bytes" msgid "Failed to allocate RX buffer of %d bytes"
msgstr "Konnte keine RX Buffer mit %d allozieren" msgstr "Konnte keine RX Buffer mit %d allozieren"
#: ports/atmel-samd/common-hal/pulseio/PulseIn.c:203 #: ports/atmel-samd/common-hal/pulseio/PulseIn.c:205
#: ports/esp8266/common-hal/pulseio/PulseIn.c:151 #: ports/esp8266/common-hal/pulseio/PulseIn.c:151
msgid "pop from an empty PulseIn" msgid "pop from an empty PulseIn"
msgstr "pop von einem leeren PulseIn" msgstr "pop von einem leeren PulseIn"
#: ports/atmel-samd/common-hal/pulseio/PulseIn.c:235 #: ports/atmel-samd/common-hal/pulseio/PulseIn.c:237
#: ports/esp8266/common-hal/pulseio/PulseIn.c:182 py/obj.c:420 #: ports/esp8266/common-hal/pulseio/PulseIn.c:182 py/obj.c:420
msgid "index out of range" msgid "index out of range"
msgstr "index außerhalb der Reichweite" msgstr "index außerhalb der Reichweite"
@ -614,11 +619,11 @@ msgid "frequency can only be either 80Mhz or 160MHz"
msgstr "" msgstr ""
#: ports/esp8266/modnetwork.c:61 #: ports/esp8266/modnetwork.c:61
msgid "STA required" msgid "AP required"
msgstr "" msgstr ""
#: ports/esp8266/modnetwork.c:61 #: ports/esp8266/modnetwork.c:61
msgid "AP required" msgid "STA required"
msgstr "" msgstr ""
#: ports/esp8266/modnetwork.c:87 #: ports/esp8266/modnetwork.c:87
@ -689,11 +694,11 @@ msgstr ""
msgid "AnalogOut functionality not supported" msgid "AnalogOut functionality not supported"
msgstr "" msgstr ""
#: ports/nrf/common-hal/busio/UART.c:45 ports/nrf/common-hal/busio/UART.c:49 #: ports/nrf/common-hal/busio/UART.c:43 ports/nrf/common-hal/busio/UART.c:47
#: ports/nrf/common-hal/busio/UART.c:53 ports/nrf/common-hal/busio/UART.c:62 #: ports/nrf/common-hal/busio/UART.c:51 ports/nrf/common-hal/busio/UART.c:60
#: ports/nrf/common-hal/busio/UART.c:68 ports/nrf/common-hal/busio/UART.c:73 #: ports/nrf/common-hal/busio/UART.c:66 ports/nrf/common-hal/busio/UART.c:71
#: ports/nrf/common-hal/busio/UART.c:78 ports/nrf/common-hal/busio/UART.c:83 #: ports/nrf/common-hal/busio/UART.c:76 ports/nrf/common-hal/busio/UART.c:81
#: ports/nrf/common-hal/busio/UART.c:88 #: ports/nrf/common-hal/busio/UART.c:86
msgid "busio.UART not yet implemented" msgid "busio.UART not yet implemented"
msgstr "" msgstr ""
@ -2026,6 +2031,61 @@ msgstr ""
msgid "Unsupported pull value." msgid "Unsupported pull value."
msgstr "" msgstr ""
#: shared-bindings/displayio/Bitmap.c:84
msgid "y should be an int"
msgstr ""
#: shared-bindings/displayio/Bitmap.c:89
msgid "row buffer must be a bytearray or array of type 'b' or 'B'"
msgstr ""
#: shared-bindings/displayio/Bitmap.c:94
msgid "row data must be a buffer"
msgstr ""
#: shared-bindings/displayio/FourWire.c:55
#: shared-bindings/displayio/FourWire.c:64
msgid "displayio is a work in progress"
msgstr ""
#: shared-bindings/displayio/Group.c:65
msgid "Group must have size at least 1"
msgstr ""
#: shared-bindings/displayio/Palette.c:96
msgid "color buffer must be a bytearray or array of type 'b' or 'B'"
msgstr ""
#: shared-bindings/displayio/Palette.c:102
msgid "color buffer must be 3 bytes (RGB) or 4 bytes (RGB + pad byte)"
msgstr ""
#: shared-bindings/displayio/Palette.c:106
msgid "color must be between 0x000000 and 0xffffff"
msgstr ""
#: shared-bindings/displayio/Palette.c:110
msgid "color buffer must be a buffer or int"
msgstr ""
#: shared-bindings/displayio/Palette.c:123
#: shared-bindings/displayio/Palette.c:137
msgid "palette_index should be an int"
msgstr ""
#: shared-bindings/displayio/Sprite.c:45
msgid "position must be 2-tuple"
msgstr ""
#: shared-bindings/displayio/Sprite.c:87
#, fuzzy
msgid "unsupported bitmap type"
msgstr "Baudrate wird nicht unterstütz"
#: shared-bindings/displayio/Sprite.c:152
msgid "palette must be displayio.Palette"
msgstr ""
#: shared-bindings/gamepad/GamePad.c:100 #: shared-bindings/gamepad/GamePad.c:100
msgid "too many arguments" msgid "too many arguments"
msgstr "" msgstr ""
@ -2131,7 +2191,7 @@ msgid "empty sequence"
msgstr "" msgstr ""
#: shared-bindings/rtc/RTC.c:40 shared-bindings/rtc/RTC.c:44 #: shared-bindings/rtc/RTC.c:40 shared-bindings/rtc/RTC.c:44
#: shared-bindings/time/__init__.c:192 #: shared-bindings/time/__init__.c:190
msgid "RTC is not supported on this board" msgid "RTC is not supported on this board"
msgstr "" msgstr ""
@ -2151,27 +2211,27 @@ msgstr ""
msgid "Stack size must be at least 256" msgid "Stack size must be at least 256"
msgstr "" msgstr ""
#: shared-bindings/time/__init__.c:80 #: shared-bindings/time/__init__.c:78
msgid "sleep length must be non-negative" msgid "sleep length must be non-negative"
msgstr "" msgstr ""
#: shared-bindings/time/__init__.c:90 #: shared-bindings/time/__init__.c:88
msgid "time.struct_time() takes exactly 1 argument" msgid "time.struct_time() takes exactly 1 argument"
msgstr "" msgstr ""
#: shared-bindings/time/__init__.c:93 #: shared-bindings/time/__init__.c:91
msgid "time.struct_time() takes a 9-sequence" msgid "time.struct_time() takes a 9-sequence"
msgstr "" msgstr ""
#: shared-bindings/time/__init__.c:171 shared-bindings/time/__init__.c:252 #: shared-bindings/time/__init__.c:169 shared-bindings/time/__init__.c:250
msgid "Tuple or struct_time argument required" msgid "Tuple or struct_time argument required"
msgstr "" msgstr ""
#: shared-bindings/time/__init__.c:176 shared-bindings/time/__init__.c:257 #: shared-bindings/time/__init__.c:174 shared-bindings/time/__init__.c:255
msgid "function takes exactly 9 arguments" msgid "function takes exactly 9 arguments"
msgstr "" msgstr ""
#: shared-bindings/time/__init__.c:228 shared-bindings/time/__init__.c:261 #: shared-bindings/time/__init__.c:226 shared-bindings/time/__init__.c:259
msgid "timestamp out of range for platform time_t" msgid "timestamp out of range for platform time_t"
msgstr "" msgstr ""
@ -2240,6 +2300,18 @@ msgstr ""
msgid "Cannot transfer without MOSI and MISO pins." msgid "Cannot transfer without MOSI and MISO pins."
msgstr "" msgstr ""
#: shared-module/displayio/Bitmap.c:49
msgid "Only bit maps of 8 bit color or less are supported"
msgstr ""
#: shared-module/displayio/Bitmap.c:69
msgid "row must be packed and word aligned"
msgstr ""
#: shared-module/displayio/Group.c:39
msgid "Group full"
msgstr ""
#: shared-module/struct/__init__.c:39 #: shared-module/struct/__init__.c:39
msgid "'S' and 'O' are not supported format types" msgid "'S' and 'O' are not supported format types"
msgstr "" msgstr ""

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-08-30 16:12-0700\n" "POT-Creation-Date: 2018-09-06 14:55-0700\n"
"PO-Revision-Date: 2018-07-27 11:55-0700\n" "PO-Revision-Date: 2018-07-27 11:55-0700\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: \n" "Language-Team: \n"
@ -231,15 +231,15 @@ msgstr ""
msgid "calibration is out of range" msgid "calibration is out of range"
msgstr "" msgstr ""
#: ports/atmel-samd/board_busses.c:39 #: ports/atmel-samd/board_busses.c:39 ports/nrf/board_busses.c:39
msgid "No default I2C bus" msgid "No default I2C bus"
msgstr "" msgstr ""
#: ports/atmel-samd/board_busses.c:64 #: ports/atmel-samd/board_busses.c:64 ports/nrf/board_busses.c:64
msgid "No default SPI bus" msgid "No default SPI bus"
msgstr "" msgstr ""
#: ports/atmel-samd/board_busses.c:91 #: ports/atmel-samd/board_busses.c:91 ports/nrf/board_busses.c:91
msgid "No default UART bus" msgid "No default UART bus"
msgstr "" msgstr ""
@ -388,12 +388,12 @@ msgstr ""
msgid "No RX pin" msgid "No RX pin"
msgstr "" msgstr ""
#: ports/atmel-samd/common-hal/busio/UART.c:284 #: ports/atmel-samd/common-hal/busio/UART.c:288
msgid "No TX pin" msgid "No TX pin"
msgstr "" msgstr ""
#: ports/atmel-samd/common-hal/digitalio/DigitalInOut.c:168 #: ports/atmel-samd/common-hal/digitalio/DigitalInOut.c:170
#: ports/nrf/common-hal/digitalio/DigitalInOut.c:158 #: ports/nrf/common-hal/digitalio/DigitalInOut.c:153
msgid "Cannot get pull while in output mode" msgid "Cannot get pull while in output mode"
msgstr "" msgstr ""
@ -426,12 +426,12 @@ msgstr ""
msgid "Failed to allocate RX buffer of %d bytes" msgid "Failed to allocate RX buffer of %d bytes"
msgstr "" msgstr ""
#: ports/atmel-samd/common-hal/pulseio/PulseIn.c:203 #: ports/atmel-samd/common-hal/pulseio/PulseIn.c:205
#: ports/esp8266/common-hal/pulseio/PulseIn.c:151 #: ports/esp8266/common-hal/pulseio/PulseIn.c:151
msgid "pop from an empty PulseIn" msgid "pop from an empty PulseIn"
msgstr "" msgstr ""
#: ports/atmel-samd/common-hal/pulseio/PulseIn.c:235 #: ports/atmel-samd/common-hal/pulseio/PulseIn.c:237
#: ports/esp8266/common-hal/pulseio/PulseIn.c:182 py/obj.c:420 #: ports/esp8266/common-hal/pulseio/PulseIn.c:182 py/obj.c:420
msgid "index out of range" msgid "index out of range"
msgstr "" msgstr ""
@ -685,11 +685,11 @@ msgstr ""
msgid "AnalogOut functionality not supported" msgid "AnalogOut functionality not supported"
msgstr "" msgstr ""
#: ports/nrf/common-hal/busio/UART.c:45 ports/nrf/common-hal/busio/UART.c:49 #: ports/nrf/common-hal/busio/UART.c:43 ports/nrf/common-hal/busio/UART.c:47
#: ports/nrf/common-hal/busio/UART.c:53 ports/nrf/common-hal/busio/UART.c:62 #: ports/nrf/common-hal/busio/UART.c:51 ports/nrf/common-hal/busio/UART.c:60
#: ports/nrf/common-hal/busio/UART.c:68 ports/nrf/common-hal/busio/UART.c:73 #: ports/nrf/common-hal/busio/UART.c:66 ports/nrf/common-hal/busio/UART.c:71
#: ports/nrf/common-hal/busio/UART.c:78 ports/nrf/common-hal/busio/UART.c:83 #: ports/nrf/common-hal/busio/UART.c:76 ports/nrf/common-hal/busio/UART.c:81
#: ports/nrf/common-hal/busio/UART.c:88 #: ports/nrf/common-hal/busio/UART.c:86
msgid "busio.UART not yet implemented" msgid "busio.UART not yet implemented"
msgstr "" msgstr ""
@ -2022,6 +2022,60 @@ msgstr ""
msgid "Unsupported pull value." msgid "Unsupported pull value."
msgstr "" msgstr ""
#: shared-bindings/displayio/Bitmap.c:84
msgid "y should be an int"
msgstr ""
#: shared-bindings/displayio/Bitmap.c:89
msgid "row buffer must be a bytearray or array of type 'b' or 'B'"
msgstr ""
#: shared-bindings/displayio/Bitmap.c:94
msgid "row data must be a buffer"
msgstr ""
#: shared-bindings/displayio/FourWire.c:55
#: shared-bindings/displayio/FourWire.c:64
msgid "displayio is a work in progress"
msgstr ""
#: shared-bindings/displayio/Group.c:65
msgid "Group must have size at least 1"
msgstr ""
#: shared-bindings/displayio/Palette.c:96
msgid "color buffer must be a bytearray or array of type 'b' or 'B'"
msgstr ""
#: shared-bindings/displayio/Palette.c:102
msgid "color buffer must be 3 bytes (RGB) or 4 bytes (RGB + pad byte)"
msgstr ""
#: shared-bindings/displayio/Palette.c:106
msgid "color must be between 0x000000 and 0xffffff"
msgstr ""
#: shared-bindings/displayio/Palette.c:110
msgid "color buffer must be a buffer or int"
msgstr ""
#: shared-bindings/displayio/Palette.c:123
#: shared-bindings/displayio/Palette.c:137
msgid "palette_index should be an int"
msgstr ""
#: shared-bindings/displayio/Sprite.c:45
msgid "position must be 2-tuple"
msgstr ""
#: shared-bindings/displayio/Sprite.c:87
msgid "unsupported bitmap type"
msgstr ""
#: shared-bindings/displayio/Sprite.c:152
msgid "palette must be displayio.Palette"
msgstr ""
#: shared-bindings/gamepad/GamePad.c:100 #: shared-bindings/gamepad/GamePad.c:100
msgid "too many arguments" msgid "too many arguments"
msgstr "" msgstr ""
@ -2236,6 +2290,18 @@ msgstr ""
msgid "Cannot transfer without MOSI and MISO pins." msgid "Cannot transfer without MOSI and MISO pins."
msgstr "" msgstr ""
#: shared-module/displayio/Bitmap.c:49
msgid "Only bit maps of 8 bit color or less are supported"
msgstr ""
#: shared-module/displayio/Bitmap.c:69
msgid "row must be packed and word aligned"
msgstr ""
#: shared-module/displayio/Group.c:39
msgid "Group full"
msgstr ""
#: shared-module/struct/__init__.c:39 #: shared-module/struct/__init__.c:39
msgid "'S' and 'O' are not supported format types" msgid "'S' and 'O' are not supported format types"
msgstr "" msgstr ""

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-08-30 16:12-0700\n" "POT-Creation-Date: 2018-09-06 14:55-0700\n"
"PO-Revision-Date: 2018-08-24 22:56-0500\n" "PO-Revision-Date: 2018-08-24 22:56-0500\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: \n" "Language-Team: \n"
@ -246,15 +246,15 @@ msgstr ""
msgid "calibration is out of range" msgid "calibration is out of range"
msgstr "" msgstr ""
#: ports/atmel-samd/board_busses.c:39 #: ports/atmel-samd/board_busses.c:39 ports/nrf/board_busses.c:39
msgid "No default I2C bus" msgid "No default I2C bus"
msgstr "" msgstr ""
#: ports/atmel-samd/board_busses.c:64 #: ports/atmel-samd/board_busses.c:64 ports/nrf/board_busses.c:64
msgid "No default SPI bus" msgid "No default SPI bus"
msgstr "" msgstr ""
#: ports/atmel-samd/board_busses.c:91 #: ports/atmel-samd/board_busses.c:91 ports/nrf/board_busses.c:91
msgid "No default UART bus" msgid "No default UART bus"
msgstr "" msgstr ""
@ -404,12 +404,12 @@ msgstr ""
msgid "No RX pin" msgid "No RX pin"
msgstr "" msgstr ""
#: ports/atmel-samd/common-hal/busio/UART.c:284 #: ports/atmel-samd/common-hal/busio/UART.c:288
msgid "No TX pin" msgid "No TX pin"
msgstr "" msgstr ""
#: ports/atmel-samd/common-hal/digitalio/DigitalInOut.c:168 #: ports/atmel-samd/common-hal/digitalio/DigitalInOut.c:170
#: ports/nrf/common-hal/digitalio/DigitalInOut.c:158 #: ports/nrf/common-hal/digitalio/DigitalInOut.c:153
msgid "Cannot get pull while in output mode" msgid "Cannot get pull while in output mode"
msgstr "" msgstr ""
@ -442,12 +442,12 @@ msgstr "El canal EXTINT ya esta siendo usado"
msgid "Failed to allocate RX buffer of %d bytes" msgid "Failed to allocate RX buffer of %d bytes"
msgstr "Fallo la asignación del buffer RX de %d bytes" msgstr "Fallo la asignación del buffer RX de %d bytes"
#: ports/atmel-samd/common-hal/pulseio/PulseIn.c:203 #: ports/atmel-samd/common-hal/pulseio/PulseIn.c:205
#: ports/esp8266/common-hal/pulseio/PulseIn.c:151 #: ports/esp8266/common-hal/pulseio/PulseIn.c:151
msgid "pop from an empty PulseIn" msgid "pop from an empty PulseIn"
msgstr "" msgstr ""
#: ports/atmel-samd/common-hal/pulseio/PulseIn.c:235 #: ports/atmel-samd/common-hal/pulseio/PulseIn.c:237
#: ports/esp8266/common-hal/pulseio/PulseIn.c:182 py/obj.c:420 #: ports/esp8266/common-hal/pulseio/PulseIn.c:182 py/obj.c:420
msgid "index out of range" msgid "index out of range"
msgstr "" msgstr ""
@ -703,11 +703,11 @@ msgstr ""
msgid "AnalogOut functionality not supported" msgid "AnalogOut functionality not supported"
msgstr "" msgstr ""
#: ports/nrf/common-hal/busio/UART.c:45 ports/nrf/common-hal/busio/UART.c:49 #: ports/nrf/common-hal/busio/UART.c:43 ports/nrf/common-hal/busio/UART.c:47
#: ports/nrf/common-hal/busio/UART.c:53 ports/nrf/common-hal/busio/UART.c:62 #: ports/nrf/common-hal/busio/UART.c:51 ports/nrf/common-hal/busio/UART.c:60
#: ports/nrf/common-hal/busio/UART.c:68 ports/nrf/common-hal/busio/UART.c:73 #: ports/nrf/common-hal/busio/UART.c:66 ports/nrf/common-hal/busio/UART.c:71
#: ports/nrf/common-hal/busio/UART.c:78 ports/nrf/common-hal/busio/UART.c:83 #: ports/nrf/common-hal/busio/UART.c:76 ports/nrf/common-hal/busio/UART.c:81
#: ports/nrf/common-hal/busio/UART.c:88 #: ports/nrf/common-hal/busio/UART.c:86
msgid "busio.UART not yet implemented" msgid "busio.UART not yet implemented"
msgstr "" msgstr ""
@ -2068,6 +2068,60 @@ msgstr ""
msgid "Unsupported pull value." msgid "Unsupported pull value."
msgstr "" msgstr ""
#: shared-bindings/displayio/Bitmap.c:84
msgid "y should be an int"
msgstr ""
#: shared-bindings/displayio/Bitmap.c:89
msgid "row buffer must be a bytearray or array of type 'b' or 'B'"
msgstr ""
#: shared-bindings/displayio/Bitmap.c:94
msgid "row data must be a buffer"
msgstr ""
#: shared-bindings/displayio/FourWire.c:55
#: shared-bindings/displayio/FourWire.c:64
msgid "displayio is a work in progress"
msgstr ""
#: shared-bindings/displayio/Group.c:65
msgid "Group must have size at least 1"
msgstr ""
#: shared-bindings/displayio/Palette.c:96
msgid "color buffer must be a bytearray or array of type 'b' or 'B'"
msgstr ""
#: shared-bindings/displayio/Palette.c:102
msgid "color buffer must be 3 bytes (RGB) or 4 bytes (RGB + pad byte)"
msgstr ""
#: shared-bindings/displayio/Palette.c:106
msgid "color must be between 0x000000 and 0xffffff"
msgstr ""
#: shared-bindings/displayio/Palette.c:110
msgid "color buffer must be a buffer or int"
msgstr ""
#: shared-bindings/displayio/Palette.c:123
#: shared-bindings/displayio/Palette.c:137
msgid "palette_index should be an int"
msgstr ""
#: shared-bindings/displayio/Sprite.c:45
msgid "position must be 2-tuple"
msgstr ""
#: shared-bindings/displayio/Sprite.c:87
msgid "unsupported bitmap type"
msgstr ""
#: shared-bindings/displayio/Sprite.c:152
msgid "palette must be displayio.Palette"
msgstr ""
#: shared-bindings/gamepad/GamePad.c:100 #: shared-bindings/gamepad/GamePad.c:100
msgid "too many arguments" msgid "too many arguments"
msgstr "" msgstr ""
@ -2283,6 +2337,18 @@ msgstr ""
msgid "Cannot transfer without MOSI and MISO pins." msgid "Cannot transfer without MOSI and MISO pins."
msgstr "" msgstr ""
#: shared-module/displayio/Bitmap.c:49
msgid "Only bit maps of 8 bit color or less are supported"
msgstr ""
#: shared-module/displayio/Bitmap.c:69
msgid "row must be packed and word aligned"
msgstr ""
#: shared-module/displayio/Group.c:39
msgid "Group full"
msgstr ""
#: shared-module/struct/__init__.c:39 #: shared-module/struct/__init__.c:39
msgid "'S' and 'O' are not supported format types" msgid "'S' and 'O' are not supported format types"
msgstr "" msgstr ""

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-08-30 18:29-0700\n" "POT-Creation-Date: 2018-09-06 14:55-0700\n"
"PO-Revision-Date: 2018-08-30 23:04-0700\n" "PO-Revision-Date: 2018-08-30 23:04-0700\n"
"Last-Translator: Timothy <me@timothygarcia.ca>\n" "Last-Translator: Timothy <me@timothygarcia.ca>\n"
"Language-Team: fil\n" "Language-Team: fil\n"
@ -243,15 +243,15 @@ msgstr "pagkakalibrate ay basahin lamang"
msgid "calibration is out of range" msgid "calibration is out of range"
msgstr "kalibrasion ay wala sa sakop" msgstr "kalibrasion ay wala sa sakop"
#: ports/atmel-samd/board_busses.c:39 #: ports/atmel-samd/board_busses.c:39 ports/nrf/board_busses.c:39
msgid "No default I2C bus" msgid "No default I2C bus"
msgstr "Walang default na I2C bus" msgstr "Walang default na I2C bus"
#: ports/atmel-samd/board_busses.c:64 #: ports/atmel-samd/board_busses.c:64 ports/nrf/board_busses.c:64
msgid "No default SPI bus" msgid "No default SPI bus"
msgstr "Walang default SPI bus" msgstr "Walang default SPI bus"
#: ports/atmel-samd/board_busses.c:91 #: ports/atmel-samd/board_busses.c:91 ports/nrf/board_busses.c:91
msgid "No default UART bus" msgid "No default UART bus"
msgstr "Walang default UART bus" msgstr "Walang default UART bus"
@ -400,12 +400,12 @@ msgstr "Hindi ma-initialize ang UART"
msgid "No RX pin" msgid "No RX pin"
msgstr "Walang RX pin" msgstr "Walang RX pin"
#: ports/atmel-samd/common-hal/busio/UART.c:284 #: ports/atmel-samd/common-hal/busio/UART.c:288
msgid "No TX pin" msgid "No TX pin"
msgstr "Walang TX pin" msgstr "Walang TX pin"
#: ports/atmel-samd/common-hal/digitalio/DigitalInOut.c:168 #: ports/atmel-samd/common-hal/digitalio/DigitalInOut.c:170
#: ports/nrf/common-hal/digitalio/DigitalInOut.c:158 #: ports/nrf/common-hal/digitalio/DigitalInOut.c:153
msgid "Cannot get pull while in output mode" msgid "Cannot get pull while in output mode"
msgstr "Hindi makakakuha ng pull habang nasa output mode" msgstr "Hindi makakakuha ng pull habang nasa output mode"
@ -438,12 +438,12 @@ msgstr "Ginagamit na ang EXTINT channel"
msgid "Failed to allocate RX buffer of %d bytes" msgid "Failed to allocate RX buffer of %d bytes"
msgstr "Nabigong ilaan ang RX buffer ng %d bytes" msgstr "Nabigong ilaan ang RX buffer ng %d bytes"
#: ports/atmel-samd/common-hal/pulseio/PulseIn.c:203 #: ports/atmel-samd/common-hal/pulseio/PulseIn.c:205
#: ports/esp8266/common-hal/pulseio/PulseIn.c:151 #: ports/esp8266/common-hal/pulseio/PulseIn.c:151
msgid "pop from an empty PulseIn" msgid "pop from an empty PulseIn"
msgstr "pop mula sa walang laman na PulseIn" msgstr "pop mula sa walang laman na PulseIn"
#: ports/atmel-samd/common-hal/pulseio/PulseIn.c:235 #: ports/atmel-samd/common-hal/pulseio/PulseIn.c:237
#: ports/esp8266/common-hal/pulseio/PulseIn.c:182 py/obj.c:420 #: ports/esp8266/common-hal/pulseio/PulseIn.c:182 py/obj.c:420
msgid "index out of range" msgid "index out of range"
msgstr "index wala sa sakop" msgstr "index wala sa sakop"
@ -700,11 +700,11 @@ msgstr "hindi alam na config param"
msgid "AnalogOut functionality not supported" msgid "AnalogOut functionality not supported"
msgstr "Hindi supportado ang AnalogOut" msgstr "Hindi supportado ang AnalogOut"
#: ports/nrf/common-hal/busio/UART.c:45 ports/nrf/common-hal/busio/UART.c:49 #: ports/nrf/common-hal/busio/UART.c:43 ports/nrf/common-hal/busio/UART.c:47
#: ports/nrf/common-hal/busio/UART.c:53 ports/nrf/common-hal/busio/UART.c:62 #: ports/nrf/common-hal/busio/UART.c:51 ports/nrf/common-hal/busio/UART.c:60
#: ports/nrf/common-hal/busio/UART.c:68 ports/nrf/common-hal/busio/UART.c:73 #: ports/nrf/common-hal/busio/UART.c:66 ports/nrf/common-hal/busio/UART.c:71
#: ports/nrf/common-hal/busio/UART.c:78 ports/nrf/common-hal/busio/UART.c:83 #: ports/nrf/common-hal/busio/UART.c:76 ports/nrf/common-hal/busio/UART.c:81
#: ports/nrf/common-hal/busio/UART.c:88 #: ports/nrf/common-hal/busio/UART.c:86
msgid "busio.UART not yet implemented" msgid "busio.UART not yet implemented"
msgstr "hindi pa implemented ang busio.UART" msgstr "hindi pa implemented ang busio.UART"
@ -2060,6 +2060,74 @@ msgstr "Pull hindi ginagamit kapag ang direksyon ay output."
msgid "Unsupported pull value." msgid "Unsupported pull value."
msgstr "Hindi suportado ang pull value." msgstr "Hindi suportado ang pull value."
#: shared-bindings/displayio/Bitmap.c:84
#, fuzzy
msgid "y should be an int"
msgstr "Haba ay dapat int"
#: shared-bindings/displayio/Bitmap.c:89
#, fuzzy
msgid "row buffer must be a bytearray or array of type 'b' or 'B'"
msgstr ""
"ang sample_source buffer ay dapat na isang bytearray o array ng uri na 'h', "
"'H', 'b' o'B'"
#: shared-bindings/displayio/Bitmap.c:94
#, fuzzy
msgid "row data must be a buffer"
msgstr "constant ay dapat na integer"
#: shared-bindings/displayio/FourWire.c:55
#: shared-bindings/displayio/FourWire.c:64
msgid "displayio is a work in progress"
msgstr ""
#: shared-bindings/displayio/Group.c:65
#, fuzzy
msgid "Group must have size at least 1"
msgstr "Buffer dapat ay hindi baba sa 1 na haba"
#: shared-bindings/displayio/Palette.c:96
#, fuzzy
msgid "color buffer must be a bytearray or array of type 'b' or 'B'"
msgstr ""
"ang sample_source buffer ay dapat na isang bytearray o array ng uri na 'h', "
"'H', 'b' o'B'"
#: shared-bindings/displayio/Palette.c:102
msgid "color buffer must be 3 bytes (RGB) or 4 bytes (RGB + pad byte)"
msgstr ""
#: shared-bindings/displayio/Palette.c:106
#, fuzzy
msgid "color must be between 0x000000 and 0xffffff"
msgstr "Sa gitna ng 0 o 255 dapat ang bytes."
#: shared-bindings/displayio/Palette.c:110
#, fuzzy
msgid "color buffer must be a buffer or int"
msgstr "buffer ay dapat bytes-like object"
#: shared-bindings/displayio/Palette.c:123
#: shared-bindings/displayio/Palette.c:137
msgid "palette_index should be an int"
msgstr ""
#: shared-bindings/displayio/Sprite.c:45
#, fuzzy
msgid "position must be 2-tuple"
msgstr "stop dapat 1 o 2"
#: shared-bindings/displayio/Sprite.c:87
#, fuzzy
msgid "unsupported bitmap type"
msgstr "Hindi supportadong baudrate"
#: shared-bindings/displayio/Sprite.c:152
#, fuzzy
msgid "palette must be displayio.Palette"
msgstr "ang palette ay dapat 32 bytes ang haba"
#: shared-bindings/gamepad/GamePad.c:100 #: shared-bindings/gamepad/GamePad.c:100
msgid "too many arguments" msgid "too many arguments"
msgstr "masyadong maraming argumento" msgstr "masyadong maraming argumento"
@ -2277,6 +2345,18 @@ msgstr "Hindi maaring mabasa kapag walang MISO pin."
msgid "Cannot transfer without MOSI and MISO pins." msgid "Cannot transfer without MOSI and MISO pins."
msgstr "Hindi maaaring ilipat kapag walang MOSI at MISO pin." msgstr "Hindi maaaring ilipat kapag walang MOSI at MISO pin."
#: shared-module/displayio/Bitmap.c:49
msgid "Only bit maps of 8 bit color or less are supported"
msgstr ""
#: shared-module/displayio/Bitmap.c:69
msgid "row must be packed and word aligned"
msgstr ""
#: shared-module/displayio/Group.c:39
msgid "Group full"
msgstr ""
#: shared-module/struct/__init__.c:39 #: shared-module/struct/__init__.c:39
msgid "'S' and 'O' are not supported format types" msgid "'S' and 'O' are not supported format types"
msgstr "Ang 'S' at 'O' ay hindi suportadong uri ng format" msgstr "Ang 'S' at 'O' ay hindi suportadong uri ng format"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: 0.1\n" "Project-Id-Version: 0.1\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-08-30 16:12-0700\n" "POT-Creation-Date: 2018-09-06 14:55-0700\n"
"PO-Revision-Date: 2018-08-14 11:01+0200\n" "PO-Revision-Date: 2018-08-14 11:01+0200\n"
"Last-Translator: Pierrick Couturier <arofarn@arofarn.info>\n" "Last-Translator: Pierrick Couturier <arofarn@arofarn.info>\n"
"Language-Team: fr\n" "Language-Team: fr\n"
@ -238,15 +238,15 @@ msgstr "la calibration est en lecture seule"
msgid "calibration is out of range" msgid "calibration is out of range"
msgstr "la calibration est hors gamme" msgstr "la calibration est hors gamme"
#: ports/atmel-samd/board_busses.c:39 #: ports/atmel-samd/board_busses.c:39 ports/nrf/board_busses.c:39
msgid "No default I2C bus" msgid "No default I2C bus"
msgstr "Pas de bus I2C par défaut" msgstr "Pas de bus I2C par défaut"
#: ports/atmel-samd/board_busses.c:64 #: ports/atmel-samd/board_busses.c:64 ports/nrf/board_busses.c:64
msgid "No default SPI bus" msgid "No default SPI bus"
msgstr "Pas de bus SPI par défaut" msgstr "Pas de bus SPI par défaut"
#: ports/atmel-samd/board_busses.c:91 #: ports/atmel-samd/board_busses.c:91 ports/nrf/board_busses.c:91
msgid "No default UART bus" msgid "No default UART bus"
msgstr "Pas de bus UART par défaut" msgstr "Pas de bus UART par défaut"
@ -395,12 +395,12 @@ msgstr "L'UART n'a pu être initialisé"
msgid "No RX pin" msgid "No RX pin"
msgstr "Pas de broche RX" msgstr "Pas de broche RX"
#: ports/atmel-samd/common-hal/busio/UART.c:284 #: ports/atmel-samd/common-hal/busio/UART.c:288
msgid "No TX pin" msgid "No TX pin"
msgstr "Pas de broche TX" msgstr "Pas de broche TX"
#: ports/atmel-samd/common-hal/digitalio/DigitalInOut.c:168 #: ports/atmel-samd/common-hal/digitalio/DigitalInOut.c:170
#: ports/nrf/common-hal/digitalio/DigitalInOut.c:158 #: ports/nrf/common-hal/digitalio/DigitalInOut.c:153
msgid "Cannot get pull while in output mode" msgid "Cannot get pull while in output mode"
msgstr "Ne peux être tirer ('pull') en mode 'output'" msgstr "Ne peux être tirer ('pull') en mode 'output'"
@ -434,12 +434,12 @@ msgstr "Canal EXTINT déjà utilisé"
msgid "Failed to allocate RX buffer of %d bytes" msgid "Failed to allocate RX buffer of %d bytes"
msgstr "Echec de l'allocation de %d octets du tampon RX" msgstr "Echec de l'allocation de %d octets du tampon RX"
#: ports/atmel-samd/common-hal/pulseio/PulseIn.c:203 #: ports/atmel-samd/common-hal/pulseio/PulseIn.c:205
#: ports/esp8266/common-hal/pulseio/PulseIn.c:151 #: ports/esp8266/common-hal/pulseio/PulseIn.c:151
msgid "pop from an empty PulseIn" msgid "pop from an empty PulseIn"
msgstr "'pop' d'une entrée PulseIn vide" msgstr "'pop' d'une entrée PulseIn vide"
#: ports/atmel-samd/common-hal/pulseio/PulseIn.c:235 #: ports/atmel-samd/common-hal/pulseio/PulseIn.c:237
#: ports/esp8266/common-hal/pulseio/PulseIn.c:182 py/obj.c:420 #: ports/esp8266/common-hal/pulseio/PulseIn.c:182 py/obj.c:420
msgid "index out of range" msgid "index out of range"
msgstr "index hors gamme" msgstr "index hors gamme"
@ -696,11 +696,11 @@ msgstr "paramètre de config. inconnu"
msgid "AnalogOut functionality not supported" msgid "AnalogOut functionality not supported"
msgstr "AnalogOut non supporté" msgstr "AnalogOut non supporté"
#: ports/nrf/common-hal/busio/UART.c:45 ports/nrf/common-hal/busio/UART.c:49 #: ports/nrf/common-hal/busio/UART.c:43 ports/nrf/common-hal/busio/UART.c:47
#: ports/nrf/common-hal/busio/UART.c:53 ports/nrf/common-hal/busio/UART.c:62 #: ports/nrf/common-hal/busio/UART.c:51 ports/nrf/common-hal/busio/UART.c:60
#: ports/nrf/common-hal/busio/UART.c:68 ports/nrf/common-hal/busio/UART.c:73 #: ports/nrf/common-hal/busio/UART.c:66 ports/nrf/common-hal/busio/UART.c:71
#: ports/nrf/common-hal/busio/UART.c:78 ports/nrf/common-hal/busio/UART.c:83 #: ports/nrf/common-hal/busio/UART.c:76 ports/nrf/common-hal/busio/UART.c:81
#: ports/nrf/common-hal/busio/UART.c:88 #: ports/nrf/common-hal/busio/UART.c:86
msgid "busio.UART not yet implemented" msgid "busio.UART not yet implemented"
msgstr "busio.UART pas encore implémenté" msgstr "busio.UART pas encore implémenté"
@ -2051,6 +2051,75 @@ msgstr "Le tirage 'pull' n'est pas utilisé quand la direction est 'output'"
msgid "Unsupported pull value." msgid "Unsupported pull value."
msgstr "Valeur de 'pull' non supportée" msgstr "Valeur de 'pull' non supportée"
#: shared-bindings/displayio/Bitmap.c:84
#, fuzzy
msgid "y should be an int"
msgstr "La longueur doit être entière"
#: shared-bindings/displayio/Bitmap.c:89
#, fuzzy
msgid "row buffer must be a bytearray or array of type 'b' or 'B'"
msgstr ""
"le tampon de sample_source doit être un bytearray ou un tableau de type "
"'h','H', 'b' ou 'B'"
#: shared-bindings/displayio/Bitmap.c:94
#, fuzzy
msgid "row data must be a buffer"
msgstr "les constantes doivent être des entiers"
#: shared-bindings/displayio/FourWire.c:55
#: shared-bindings/displayio/FourWire.c:64
msgid "displayio is a work in progress"
msgstr ""
#: shared-bindings/displayio/Group.c:65
#, fuzzy
msgid "Group must have size at least 1"
msgstr "Le tampon doit être de longueur au moins 1"
#: shared-bindings/displayio/Palette.c:96
#, fuzzy
msgid "color buffer must be a bytearray or array of type 'b' or 'B'"
msgstr ""
"le tampon de sample_source doit être un bytearray ou un tableau de type "
"'h','H', 'b' ou 'B'"
#: shared-bindings/displayio/Palette.c:102
msgid "color buffer must be 3 bytes (RGB) or 4 bytes (RGB + pad byte)"
msgstr ""
#: shared-bindings/displayio/Palette.c:106
#, fuzzy
msgid "color must be between 0x000000 and 0xffffff"
msgstr "Les octets 'bytes' doivent être entre 0 et 255"
#: shared-bindings/displayio/Palette.c:110
#, fuzzy
msgid "color buffer must be a buffer or int"
msgstr "le tampon doit être un objet bytes-like"
#: shared-bindings/displayio/Palette.c:123
#: shared-bindings/displayio/Palette.c:137
#, fuzzy
msgid "palette_index should be an int"
msgstr "Les valeurs du tableau doivent être des octets simples 'bytes'"
#: shared-bindings/displayio/Sprite.c:45
#, fuzzy
msgid "position must be 2-tuple"
msgstr "stop doit être 1 ou 2"
#: shared-bindings/displayio/Sprite.c:87
#, fuzzy
msgid "unsupported bitmap type"
msgstr "Débit non supporté"
#: shared-bindings/displayio/Sprite.c:152
#, fuzzy
msgid "palette must be displayio.Palette"
msgstr "la palette doit être longue de 32 octets"
#: shared-bindings/gamepad/GamePad.c:100 #: shared-bindings/gamepad/GamePad.c:100
msgid "too many arguments" msgid "too many arguments"
msgstr "trop d'arguments" msgstr "trop d'arguments"
@ -2272,6 +2341,18 @@ msgstr "Impossible de lire sans broche MISO."
msgid "Cannot transfer without MOSI and MISO pins." msgid "Cannot transfer without MOSI and MISO pins."
msgstr "Pas de transfert sans broches MOSI et MISO" msgstr "Pas de transfert sans broches MOSI et MISO"
#: shared-module/displayio/Bitmap.c:49
msgid "Only bit maps of 8 bit color or less are supported"
msgstr ""
#: shared-module/displayio/Bitmap.c:69
msgid "row must be packed and word aligned"
msgstr ""
#: shared-module/displayio/Group.c:39
msgid "Group full"
msgstr ""
#: shared-module/struct/__init__.c:39 #: shared-module/struct/__init__.c:39
msgid "'S' and 'O' are not supported format types" msgid "'S' and 'O' are not supported format types"
msgstr "'S' et 'O' ne sont pas des types de format supportés" msgstr "'S' et 'O' ne sont pas des types de format supportés"
@ -2279,3 +2360,7 @@ msgstr "'S' et 'O' ne sont pas des types de format supportés"
#: shared-module/struct/__init__.c:83 #: shared-module/struct/__init__.c:83
msgid "too many arguments provided with the given format" msgid "too many arguments provided with the given format"
msgstr "trop d'arguments fournis avec ce format" msgstr "trop d'arguments fournis avec ce format"
#, fuzzy
#~ msgid "value_size must be power of two"
#~ msgstr "'len' doit être un multiple de 4"

View File

@ -308,6 +308,7 @@ SRC_COMMON_HAL = \
busio/UART.c \ busio/UART.c \
digitalio/__init__.c \ digitalio/__init__.c \
digitalio/DigitalInOut.c \ digitalio/DigitalInOut.c \
displayio/FourWire.c \
i2cslave/__init__.c \ i2cslave/__init__.c \
i2cslave/I2CSlave.c \ i2cslave/I2CSlave.c \
microcontroller/__init__.c \ microcontroller/__init__.c \
@ -381,6 +382,11 @@ SRC_SHARED_MODULE = \
bitbangio/OneWire.c \ bitbangio/OneWire.c \
bitbangio/SPI.c \ bitbangio/SPI.c \
busio/OneWire.c \ busio/OneWire.c \
displayio/__init__.c \
displayio/Bitmap.c \
displayio/Group.c \
displayio/Palette.c \
displayio/Sprite.c \
gamepad/__init__.c \ gamepad/__init__.c \
gamepad/GamePad.c \ gamepad/GamePad.c \
_stage/__init__.c \ _stage/__init__.c \

View File

@ -30,12 +30,17 @@
#include "usb.h" #include "usb.h"
#include "usb_mass_storage.h" #include "usb_mass_storage.h"
#include "shared-module/displayio/__init__.h"
volatile uint64_t last_finished_tick = 0; volatile uint64_t last_finished_tick = 0;
void run_background_tasks(void) { void run_background_tasks(void) {
#if (defined(SAMD21) && defined(PIN_PA02)) || defined(SAMD51) #if (defined(SAMD21) && defined(PIN_PA02)) || defined(SAMD51)
audio_dma_background(); audio_dma_background();
#endif #endif
#ifdef CIRCUITPY_DISPLAYIO
displayio_refresh_display();
#endif
usb_msc_background(); usb_msc_background();
usb_cdc_background(); usb_cdc_background();
last_finished_tick = ticks_ms; last_finished_tick = ticks_ms;

View File

@ -31,6 +31,14 @@
#include <stdbool.h> #include <stdbool.h>
#include "py/mpconfig.h"
#ifdef CIRCUITPY_DISPLAYIO
#include "common-hal/displayio/FourWire.h"
extern displayio_fourwire_obj_t board_display_obj;
#endif
// Initializes board related state once on start up. // Initializes board related state once on start up.
void board_init(void); void board_init(void);

View File

@ -26,8 +26,89 @@
#include "boards/board.h" #include "boards/board.h"
void board_init(void) #include "shared-bindings/displayio/FourWire.h"
{ #include "shared-module/displayio/mipi_constants.h"
#include "tick.h"
displayio_fourwire_obj_t board_display_obj;
#define DELAY 0x80
uint8_t display_init_sequence[] = {
0x01, 0 | DELAY, 150, // SWRESET
0x11, 0 | DELAY, 255, // SLPOUT
0xb1, 3, 0x01, 0x2C, 0x2D, // _FRMCTR1
0xb2, 3, 0x01, 0x2C, 0x2D, //
0xb3, 6, 0x01, 0x2C, 0x2D, 0x01, 0x2C, 0x2D,
0xb4, 1, 0x07, // _INVCTR line inversion
0xc0, 3, 0xa2, 0x02, 0x84, // _PWCTR1 GVDD = 4.7V, 1.0uA
0xc1, 1, 0xc5, // _PWCTR2 VGH=14.7V, VGL=-7.35V
0xc2, 2, 0x0a, 0x00, // _PWCTR3 Opamp current small, Boost frequency
0xc3, 2, 0x8a, 0x2a,
0xc4, 2, 0x8a, 0xee,
0xc5, 1, 0x0e, // _VMCTR1 VCOMH = 4V, VOML = -1.1V
0x2a, 0, // _INVOFF
0x36, 1, 0x18, // _MADCTL bottom to top refresh
// 1 clk cycle nonoverlap, 2 cycle gate rise, 3 sycle osc equalie,
// fix on VTL
0x3a, 1, 0x05, // COLMOD - 16bit color
0xe0, 16, 0x02, 0x1c, 0x07, 0x12, // _GMCTRP1 Gamma
0x37, 0x32, 0x29, 0x2d,
0x29, 0x25, 0x2B, 0x39,
0x00, 0x01, 0x03, 0x10,
0xe1, 16, 0x03, 0x1d, 0x07, 0x06, // _GMCTRN1
0x2E, 0x2C, 0x29, 0x2D,
0x2E, 0x2E, 0x37, 0x3F,
0x00, 0x00, 0x02, 0x10,
0x2a, 3, 0x02, 0x00, 0x81, // _CASET XSTART = 2, XEND = 129
0x2b, 3, 0x02, 0x00, 0x81, // _RASET XSTART = 2, XEND = 129
0x13, 0 | DELAY, 10, // _NORON
0x29, 0 | DELAY, 100, // _DISPON
};
void board_init(void) {
board_display_obj.base.type = &displayio_fourwire_type;
common_hal_displayio_fourwire_construct(&board_display_obj,
&pin_PB23, // Clock
&pin_PB22, // Data
&pin_PA28, // Command or data
&pin_PA01, // Chip select
&pin_PA27, // Reset
128, // Width
128, // Height
2, // column start
0, // row start
16, // Color depth
MIPI_COMMAND_SET_COLUMN_ADDRESS, // Set column command
MIPI_COMMAND_SET_PAGE_ADDRESS, // Set row command
MIPI_COMMAND_WRITE_MEMORY_START); // Write memory command
uint32_t i = 0;
common_hal_displayio_fourwire_begin_transaction(&board_display_obj);
while (i < sizeof(display_init_sequence)) {
uint8_t *cmd = display_init_sequence + i;
uint8_t data_size = *(cmd + 1);
bool delay = (data_size & DELAY) != 0;
data_size &= ~DELAY;
uint8_t *data = cmd + 2;
common_hal_displayio_fourwire_send(&board_display_obj, true, cmd, 1);
common_hal_displayio_fourwire_send(&board_display_obj, false, data, data_size);
if (delay) {
data_size++;
uint16_t delay_length_ms = *(cmd + 1 + data_size);
if (delay_length_ms == 255) {
delay_length_ms = 500;
}
uint64_t start = ticks_ms;
while (ticks_ms - start < delay_length_ms) {}
} else {
uint64_t start = ticks_ms;
while (ticks_ms - start < 10) {}
}
i += 2 + data_size;
}
common_hal_displayio_fourwire_end_transaction(&board_display_obj);
} }
bool board_requests_safe_mode(void) { bool board_requests_safe_mode(void) {
@ -35,4 +116,5 @@ bool board_requests_safe_mode(void) {
} }
void reset_board(void) { void reset_board(void) {
common_hal_displayio_fourwire_show(&board_display_obj, NULL);
} }

View File

@ -3,7 +3,7 @@
#define MICROPY_HW_NEOPIXEL (&pin_PA12) #define MICROPY_HW_NEOPIXEL (&pin_PA12)
// Clock rates are off: Salae reads 12MHz which is the limit even though we set it to the safer 8MHz. // Clock rates are off: Saleae reads 12MHz which is the limit even though we set it to the safer 8MHz.
#define SPI_FLASH_BAUDRATE (8000000) #define SPI_FLASH_BAUDRATE (8000000)
#define SPI_FLASH_MOSI_PIN PIN_PB10 #define SPI_FLASH_MOSI_PIN PIN_PB10
@ -27,8 +27,8 @@
#define SPI_FLASH_DIPO 1 // same as MISO pad #define SPI_FLASH_DIPO 1 // same as MISO pad
// These are pins not to reset. // These are pins not to reset.
#define MICROPY_PORT_A (PORT_PA07 | PORT_PA12 | PORT_PA13 | PORT_PA24 | PORT_PA25) #define MICROPY_PORT_A ( PORT_PA01 | PORT_PA07 | PORT_PA12 | PORT_PA13 | PORT_PA24 | PORT_PA25 | PORT_PA27 | PORT_PA28)
#define MICROPY_PORT_B ( PORT_PB10 | PORT_PB11 ) #define MICROPY_PORT_B ( PORT_PB10 | PORT_PB11 | PORT_PB22 | PORT_PB23 )
#define MICROPY_PORT_C ( 0 ) #define MICROPY_PORT_C ( 0 )
#include "external_flash/external_flash.h" #include "external_flash/external_flash.h"
@ -61,3 +61,5 @@
// USB is always used internally so skip the pin objects for it. // USB is always used internally so skip the pin objects for it.
#define IGNORE_PIN_PA24 1 #define IGNORE_PIN_PA24 1
#define IGNORE_PIN_PA25 1 #define IGNORE_PIN_PA25 1
#define CIRCUITPY_DISPLAYIO

View File

@ -1,5 +1,6 @@
#include "shared-bindings/board/__init__.h" #include "shared-bindings/board/__init__.h"
#include "boards/board.h"
#include "board_busses.h" #include "board_busses.h"
STATIC const mp_rom_map_elem_t board_global_dict_table[] = { STATIC const mp_rom_map_elem_t board_global_dict_table[] = {
@ -56,5 +57,7 @@ STATIC const mp_rom_map_elem_t board_global_dict_table[] = {
{ MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) }, { MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) },
{ MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&board_spi_obj) }, { MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&board_spi_obj) },
{ MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) }, { MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) },
{ MP_ROM_QSTR(MP_QSTR_DISPLAY), MP_ROM_PTR(&board_display_obj)}
}; };
MP_DEFINE_CONST_DICT(board_module_globals, board_global_dict_table); MP_DEFINE_CONST_DICT(board_module_globals, board_global_dict_table);

View File

@ -0,0 +1,139 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2018 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include "shared-bindings/displayio/FourWire.h"
#include <stdint.h>
#include "shared-bindings/busio/SPI.h"
#include "shared-bindings/digitalio/DigitalInOut.h"
#include "tick.h"
void common_hal_displayio_fourwire_construct(displayio_fourwire_obj_t* self,
const mcu_pin_obj_t* clock, const mcu_pin_obj_t* data, const mcu_pin_obj_t* command,
const mcu_pin_obj_t* chip_select, const mcu_pin_obj_t* reset, uint16_t width,
uint16_t height, int16_t colstart, int16_t rowstart, uint16_t color_depth,
uint8_t set_column_command, uint8_t set_row_command, uint8_t write_ram_command) {
common_hal_busio_spi_construct(&self->bus, clock, data, mp_const_none);
common_hal_digitalio_digitalinout_construct(&self->command, command);
common_hal_digitalio_digitalinout_switch_to_output(&self->command, true, DRIVE_MODE_PUSH_PULL);
common_hal_digitalio_digitalinout_construct(&self->chip_select, chip_select);
common_hal_digitalio_digitalinout_switch_to_output(&self->chip_select, true, DRIVE_MODE_PUSH_PULL);
common_hal_digitalio_digitalinout_construct(&self->reset, reset);
common_hal_digitalio_digitalinout_switch_to_output(&self->reset, true, DRIVE_MODE_PUSH_PULL);
self->width = width;
self->height = height;
self->color_depth = color_depth;
self->set_column_command = set_column_command;
self->set_row_command = set_row_command;
self->write_ram_command = write_ram_command;
self->current_group = NULL;
self->colstart = colstart;
self->rowstart = rowstart;
}
bool common_hal_displayio_fourwire_begin_transaction(displayio_fourwire_obj_t* self) {
if (!common_hal_busio_spi_try_lock(&self->bus)) {
return false;
}
// TODO(tannewt): Stop hardcoding SPI frequency, polarity and phase.
common_hal_busio_spi_configure(&self->bus, 12000000, 0, 0, 8);
common_hal_digitalio_digitalinout_set_value(&self->chip_select, false);
return true;
}
void common_hal_displayio_fourwire_send(displayio_fourwire_obj_t* self, bool command, uint8_t *data, uint32_t data_length) {
common_hal_digitalio_digitalinout_set_value(&self->command, !command);
common_hal_busio_spi_write(&self->bus, data, data_length);
}
void common_hal_displayio_fourwire_end_transaction(displayio_fourwire_obj_t* self) {
common_hal_digitalio_digitalinout_set_value(&self->chip_select, true);
common_hal_busio_spi_unlock(&self->bus);
}
void common_hal_displayio_fourwire_show(displayio_fourwire_obj_t* self, displayio_group_t* root_group) {
self->current_group = root_group;
common_hal_displayio_fourwire_refresh_soon(self);
}
void common_hal_displayio_fourwire_refresh_soon(displayio_fourwire_obj_t* self) {
self->refresh = true;
}
int32_t common_hal_displayio_fourwire_wait_for_frame(displayio_fourwire_obj_t* self) {
uint64_t last_refresh = self->last_refresh;
while (last_refresh == self->last_refresh) {
MICROPY_VM_HOOK_LOOP
}
return 0;
}
void displayio_fourwire_start_region_update(displayio_fourwire_obj_t* self, uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1) {
// TODO(tannewt): Handle displays with single byte bounds.
common_hal_displayio_fourwire_begin_transaction(self);
uint16_t data[2];
common_hal_displayio_fourwire_send(self, true, &self->set_column_command, 1);
data[0] = __builtin_bswap16(x0 + self->colstart);
data[1] = __builtin_bswap16(x1-1 + self->colstart);
common_hal_displayio_fourwire_send(self, false, (uint8_t*) data, 4);
common_hal_displayio_fourwire_send(self, true, &self->set_row_command, 1);
data[0] = __builtin_bswap16(y0 + 1 + self->rowstart);
data[1] = __builtin_bswap16(y1 + self->rowstart);
common_hal_displayio_fourwire_send(self, false, (uint8_t*) data, 4);
common_hal_displayio_fourwire_send(self, true, &self->write_ram_command, 1);
}
bool displayio_fourwire_send_pixels(displayio_fourwire_obj_t* self, uint32_t* pixels, uint32_t length) {
// TODO: Set this up so its async and 32 bit DMA transfers.
common_hal_displayio_fourwire_send(self, false, (uint8_t*) pixels, length*4);
return true;
}
void displayio_fourwire_finish_region_update(displayio_fourwire_obj_t* self) {
common_hal_displayio_fourwire_end_transaction(self);
}
bool displayio_fourwire_frame_queued(displayio_fourwire_obj_t* self) {
// Refresh at ~30 fps.
return (ticks_ms - self->last_refresh) > 32;
}
bool displayio_fourwire_refresh_queued(displayio_fourwire_obj_t* self) {
return self->refresh || (self->current_group != NULL && displayio_group_needs_refresh(self->current_group));
}
void displayio_fourwire_finish_refresh(displayio_fourwire_obj_t* self) {
if (self->current_group != NULL) {
displayio_group_finish_refresh(self->current_group);
}
self->refresh = false;
self->last_refresh = ticks_ms;
}

View File

@ -0,0 +1,53 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2018 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#ifndef MICROPY_INCLUDED_ATMEL_SAMD_COMMON_HAL_DISPLAYIO_FOURWIRE_H
#define MICROPY_INCLUDED_ATMEL_SAMD_COMMON_HAL_DISPLAYIO_FOURWIRE_H
#include "common-hal/busio/SPI.h"
#include "common-hal/digitalio/DigitalInOut.h"
#include "shared-module/displayio/Group.h"
typedef struct {
mp_obj_base_t base;
busio_spi_obj_t bus;
digitalio_digitalinout_obj_t command;
digitalio_digitalinout_obj_t chip_select;
digitalio_digitalinout_obj_t reset;
uint16_t width;
uint16_t height;
uint16_t color_depth;
uint8_t set_column_command;
uint8_t set_row_command;
uint8_t write_ram_command;
displayio_group_t *current_group;
bool refresh;
uint64_t last_refresh;
int16_t colstart;
int16_t rowstart;
} displayio_fourwire_obj_t;
#endif // MICROPY_INCLUDED_ATMEL_SAMD_COMMON_HAL_DISPLAYIO_FOURWIRE_H

View File

@ -171,6 +171,7 @@ extern const struct _mp_obj_module_t audioio_module;
extern const struct _mp_obj_module_t audiobusio_module; extern const struct _mp_obj_module_t audiobusio_module;
extern const struct _mp_obj_module_t analogio_module; extern const struct _mp_obj_module_t analogio_module;
extern const struct _mp_obj_module_t digitalio_module; extern const struct _mp_obj_module_t digitalio_module;
extern const struct _mp_obj_module_t displayio_module;
extern const struct _mp_obj_module_t pulseio_module; extern const struct _mp_obj_module_t pulseio_module;
extern const struct _mp_obj_module_t busio_module; extern const struct _mp_obj_module_t busio_module;
extern const struct _mp_obj_module_t board_module; extern const struct _mp_obj_module_t board_module;
@ -232,11 +233,18 @@ extern const struct _mp_obj_module_t usb_hid_module;
#define I2CSLAVE_MODULE #define I2CSLAVE_MODULE
#endif #endif
#ifdef CIRCUITPY_DISPLAYIO
#define DISPLAYIO_MODULE { MP_OBJ_NEW_QSTR(MP_QSTR_displayio), (mp_obj_t)&displayio_module },
#else
#define DISPLAYIO_MODULE
#endif
#ifndef EXTRA_BUILTIN_MODULES #ifndef EXTRA_BUILTIN_MODULES
#define EXTRA_BUILTIN_MODULES \ #define EXTRA_BUILTIN_MODULES \
AUDIOIO_MODULE \ AUDIOIO_MODULE \
AUDIOBUSIO_MODULE \ AUDIOBUSIO_MODULE \
{ MP_OBJ_NEW_QSTR(MP_QSTR_bitbangio), (mp_obj_t)&bitbangio_module }, \ { MP_OBJ_NEW_QSTR(MP_QSTR_bitbangio), (mp_obj_t)&bitbangio_module }, \
DISPLAYIO_MODULE \
I2CSLAVE_MODULE \ I2CSLAVE_MODULE \
{ MP_OBJ_NEW_QSTR(MP_QSTR_rotaryio), (mp_obj_t)&rotaryio_module }, \ { MP_OBJ_NEW_QSTR(MP_QSTR_rotaryio), (mp_obj_t)&rotaryio_module }, \
{ MP_OBJ_NEW_QSTR(MP_QSTR_gamepad),(mp_obj_t)&gamepad_module } { MP_OBJ_NEW_QSTR(MP_QSTR_gamepad),(mp_obj_t)&gamepad_module }

View File

@ -186,8 +186,6 @@ safe_mode_t port_init(void) {
#endif #endif
clock_init(); clock_init();
board_init();
// Configure millisecond timer initialization. // Configure millisecond timer initialization.
tick_init(); tick_init();
@ -196,6 +194,10 @@ safe_mode_t port_init(void) {
#endif #endif
init_shared_dma(); init_shared_dma();
// Init the board last so everything else is ready
board_init();
#ifdef CIRCUITPY_CANARY_WORD #ifdef CIRCUITPY_CANARY_WORD
// Run in safe mode if the canary is corrupt. // Run in safe mode if the canary is corrupt.
if (_ezero != CIRCUITPY_CANARY_WORD) { if (_ezero != CIRCUITPY_CANARY_WORD) {
@ -234,6 +236,12 @@ void reset_port(void) {
if (sercom_instances[i] == MICROPY_HW_APA102_SERCOM) { if (sercom_instances[i] == MICROPY_HW_APA102_SERCOM) {
continue; continue;
} }
#endif
#ifdef CIRCUITPY_DISPLAYIO
// TODO(tannewt): Make this dynamic.
if (sercom_instances[i] == board_display_obj.bus.spi_desc.dev.prvt) {
continue;
}
#endif #endif
// SWRST is same for all modes of SERCOMs. // SWRST is same for all modes of SERCOMs.
sercom_instances[i]->SPI.CTRLA.bit.SWRST = 1; sercom_instances[i]->SPI.CTRLA.bit.SWRST = 1;

View File

@ -0,0 +1,112 @@
/*
* This file is part of the Micro Python project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2018 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include "shared-bindings/displayio/Bitmap.h"
#include <stdint.h>
#include "lib/utils/context_manager_helpers.h"
#include "py/binary.h"
#include "py/objproperty.h"
#include "py/runtime.h"
#include "shared-bindings/microcontroller/Pin.h"
#include "shared-bindings/util.h"
#include "supervisor/shared/translate.h"
//| .. currentmodule:: displayio
//|
//| :class:`Bitmap` -- Stores values in a 2D array
//| ==========================================================================
//|
//| Stores values of a certain size in a 2D array
//|
//| .. warning:: This will likely be changed before 4.0.0. Consider it very experimental.
//|
//| .. class:: Bitmap(width, height, value_count)
//|
//| Create a Bitmap object with the given fixed size. Each pixel stores a value that is used to
//| index into a corresponding palette. This enables differently colored sprites to share the
//| underlying Bitmap. value_count is used to minimize the memory used to store the Bitmap.
//|
//| :param int width: The number of values wide
//| :param int height: The number of values high
//| :param int value_count: The number of possible pixel values.
//|
STATIC mp_obj_t displayio_bitmap_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *pos_args) {
mp_arg_check_num(n_args, n_kw, 3, 3, false);
uint32_t width = mp_obj_get_int(pos_args[0]);
uint32_t height = mp_obj_get_int(pos_args[1]);
uint32_t value_count = mp_obj_get_int(pos_args[2]);
uint32_t power_of_two = 1;
while (value_count > (1U << power_of_two)) {
power_of_two <<= 1;
}
displayio_bitmap_t *self = m_new_obj(displayio_bitmap_t);
self->base.type = &displayio_bitmap_type;
common_hal_displayio_bitmap_construct(self, width, height, power_of_two);
return MP_OBJ_FROM_PTR(self);
}
//| .. method:: _load_row(y, data)
//|
//| Loads pre-packed data into the given row.
//|
STATIC mp_obj_t displayio_bitmap_obj__load_row(mp_obj_t self_in, mp_obj_t y_in, mp_obj_t data_in) {
displayio_bitmap_t *self = MP_OBJ_TO_PTR(self_in);
mp_int_t y;
if (!mp_obj_get_int_maybe(y_in, &y)) {
mp_raise_ValueError(translate("y should be an int"));
}
mp_buffer_info_t bufinfo;
if (mp_get_buffer(data_in, &bufinfo, MP_BUFFER_READ)) {
if (bufinfo.typecode != 'b' && bufinfo.typecode != 'B' && bufinfo.typecode != BYTEARRAY_TYPECODE) {
mp_raise_ValueError(translate("row buffer must be a bytearray or array of type 'b' or 'B'"));
}
uint8_t* buf = bufinfo.buf;
common_hal_displayio_bitmap_load_row(self, y, buf, bufinfo.len);
} else {
mp_raise_TypeError(translate("row data must be a buffer"));
}
return mp_const_none;
}
MP_DEFINE_CONST_FUN_OBJ_3(displayio_bitmap__load_row_obj, displayio_bitmap_obj__load_row);
STATIC const mp_rom_map_elem_t displayio_bitmap_locals_dict_table[] = {
{ MP_ROM_QSTR(MP_QSTR__load_row), MP_ROM_PTR(&displayio_bitmap__load_row_obj) },
};
STATIC MP_DEFINE_CONST_DICT(displayio_bitmap_locals_dict, displayio_bitmap_locals_dict_table);
const mp_obj_type_t displayio_bitmap_type = {
{ &mp_type_type },
.name = MP_QSTR_Bitmap,
.make_new = displayio_bitmap_make_new,
// TODO(tannewt): Implement subscr after slices support start, stop and step tuples.
// .subscr = displayio_bitmap_subscr,
.locals_dict = (mp_obj_dict_t*)&displayio_bitmap_locals_dict,
};

View File

@ -0,0 +1,41 @@
/*
* This file is part of the Micro Python project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2018 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#ifndef MICROPY_INCLUDED_SHARED_BINDINGS_DISPLAYIO_BITMAP_H
#define MICROPY_INCLUDED_SHARED_BINDINGS_DISPLAYIO_BITMAP_H
#include "shared-module/displayio/Bitmap.h"
extern const mp_obj_type_t displayio_bitmap_type;
void common_hal_displayio_bitmap_construct(displayio_bitmap_t *self, uint32_t width,
uint32_t height, uint32_t bits_per_value);
void common_hal_displayio_bitmap_load_row(displayio_bitmap_t *self, uint16_t y, uint8_t* data,
uint16_t len);
uint32_t common_hal_displayio_bitmap_get_pixel(displayio_bitmap_t *bitmap, int16_t x, int16_t y);
#endif // MICROPY_INCLUDED_SHARED_BINDINGS_DISPLAYIO_BITMAP_H

View File

@ -0,0 +1,118 @@
/*
* This file is part of the Micro Python project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2018 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include "shared-bindings/displayio/FourWire.h"
#include <stdint.h>
#include "lib/utils/context_manager_helpers.h"
#include "py/binary.h"
#include "py/objproperty.h"
#include "py/runtime.h"
#include "shared-bindings/microcontroller/Pin.h"
#include "shared-bindings/util.h"
#include "supervisor/shared/translate.h"
//| .. currentmodule:: displayio
//|
//| :class:`FourWire` -- Manage updating a display over SPI four wire protocol
//| ==========================================================================
//|
//| Manage updating a display over SPI four wire protocol in the background while Python code runs.
//| It doesn't handle display initialization.
//|
//| .. warning:: This will be changed before 4.0.0. Consider it very experimental.
//|
//| .. class:: FourWire(*, clock, data, command, chip_select, width, height, colstart, rowstart,
//| color_depth, set_column_command, set_row_command, write_ram_command)
//|
//| Create a FourWire object associated with the given pins.
//|
STATIC mp_obj_t displayio_fourwire_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *pos_args) {
mp_raise_NotImplementedError(translate("displayio is a work in progress"));
return mp_const_none;
}
//| .. method:: send(command, data)
//|
//|
STATIC mp_obj_t displayio_fourwire_obj_send(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
mp_raise_NotImplementedError(translate("displayio is a work in progress"));
return mp_const_none;
}
MP_DEFINE_CONST_FUN_OBJ_KW(displayio_fourwire_send_obj, 1, displayio_fourwire_obj_send);
//| .. method:: show(group)
//|
//| Switches do displaying the given group of elements.
//|
STATIC mp_obj_t displayio_fourwire_obj_show(mp_obj_t self_in, mp_obj_t group_in) {
displayio_fourwire_obj_t *self = MP_OBJ_TO_PTR(self_in);
displayio_group_t* group = MP_OBJ_TO_PTR(group_in);
common_hal_displayio_fourwire_show(self, group);
return mp_const_none;
}
MP_DEFINE_CONST_FUN_OBJ_2(displayio_fourwire_show_obj, displayio_fourwire_obj_show);
//| .. method:: refresh_soon()
//|
//| Queues up a display refresh that happens in the background.
//|
STATIC mp_obj_t displayio_fourwire_obj_refresh_soon(mp_obj_t self_in) {
displayio_fourwire_obj_t *self = MP_OBJ_TO_PTR(self_in);
common_hal_displayio_fourwire_refresh_soon(self);
return mp_const_none;
}
MP_DEFINE_CONST_FUN_OBJ_1(displayio_fourwire_refresh_soon_obj, displayio_fourwire_obj_refresh_soon);
//| .. method:: wait_for_frame()
//|
//| Waits until the next frame has been transmitted to the display unless the wait count is
//| behind the rendered frames. In that case, this will return immediately with the wait count.
//|
STATIC mp_obj_t displayio_fourwire_obj_wait_for_frame(mp_obj_t self_in) {
displayio_fourwire_obj_t *self = MP_OBJ_TO_PTR(self_in);
return MP_OBJ_NEW_SMALL_INT(common_hal_displayio_fourwire_wait_for_frame(self));
}
MP_DEFINE_CONST_FUN_OBJ_1(displayio_fourwire_wait_for_frame_obj, displayio_fourwire_obj_wait_for_frame);
STATIC const mp_rom_map_elem_t displayio_fourwire_locals_dict_table[] = {
{ MP_ROM_QSTR(MP_QSTR_send), MP_ROM_PTR(&displayio_fourwire_send_obj) },
{ MP_ROM_QSTR(MP_QSTR_show), MP_ROM_PTR(&displayio_fourwire_show_obj) },
{ MP_ROM_QSTR(MP_QSTR_refresh_soon), MP_ROM_PTR(&displayio_fourwire_refresh_soon_obj) },
{ MP_ROM_QSTR(MP_QSTR_wait_for_frame), MP_ROM_PTR(&displayio_fourwire_wait_for_frame_obj) },
};
STATIC MP_DEFINE_CONST_DICT(displayio_fourwire_locals_dict, displayio_fourwire_locals_dict_table);
const mp_obj_type_t displayio_fourwire_type = {
{ &mp_type_type },
.name = MP_QSTR_FourWire,
.make_new = displayio_fourwire_make_new,
.locals_dict = (mp_obj_dict_t*)&displayio_fourwire_locals_dict,
};

View File

@ -0,0 +1,65 @@
/*
* This file is part of the Micro Python project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2017, 2018 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#ifndef MICROPY_INCLUDED_SHARED_BINDINGS_DISPLAYBUSIO_FOURWIRE_H
#define MICROPY_INCLUDED_SHARED_BINDINGS_DISPLAYBUSIO_FOURWIRE_H
#include "common-hal/displayio/FourWire.h"
#include "common-hal/microcontroller/Pin.h"
#include "shared-module/displayio/Group.h"
extern const mp_obj_type_t displayio_fourwire_type;
// TODO(tannewt): Split this apart into FourWire and a Display object because the dimensions and
// commands are also used for the parallel buses.
void common_hal_displayio_fourwire_construct(displayio_fourwire_obj_t* self,
const mcu_pin_obj_t* clock, const mcu_pin_obj_t* data, const mcu_pin_obj_t* command,
const mcu_pin_obj_t* chip_select, const mcu_pin_obj_t* reset, uint16_t width, uint16_t height,
int16_t colstart, int16_t rowstart, uint16_t color_depth,
uint8_t set_column_command, uint8_t set_row_command, uint8_t write_ram_command);
int32_t common_hal_displayio_fourwire_wait_for_frame(displayio_fourwire_obj_t* self);
bool common_hal_displayio_fourwire_begin_transaction(displayio_fourwire_obj_t* self);
void common_hal_displayio_fourwire_send(displayio_fourwire_obj_t* self, bool command, uint8_t *data, uint32_t data_length);
void common_hal_displayio_fourwire_end_transaction(displayio_fourwire_obj_t* self);
void common_hal_displayio_fourwire_show(displayio_fourwire_obj_t* self, displayio_group_t* root_group);
void common_hal_displayio_fourwire_refresh_soon(displayio_fourwire_obj_t* self);
void displayio_fourwire_start_region_update(displayio_fourwire_obj_t* self, uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1);
void displayio_fourwire_finish_region_update(displayio_fourwire_obj_t* self);
bool displayio_fourwire_frame_queued(displayio_fourwire_obj_t* self);
bool displayio_fourwire_refresh_queued(displayio_fourwire_obj_t* self);
void displayio_fourwire_finish_refresh(displayio_fourwire_obj_t* self);
bool displayio_fourwire_send_pixels(displayio_fourwire_obj_t* self, uint32_t* pixels, uint32_t length);
#endif // MICROPY_INCLUDED_SHARED_BINDINGS_DISPLAYBUSIO_FOURWIRE_H

View File

@ -0,0 +1,96 @@
/*
* This file is part of the Micro Python project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2018 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include "shared-bindings/displayio/Group.h"
#include <stdint.h>
#include "lib/utils/context_manager_helpers.h"
#include "py/binary.h"
#include "py/objproperty.h"
#include "py/runtime.h"
#include "supervisor/shared/translate.h"
//| .. currentmodule:: displayio
//|
//| :class:`Group` -- Group together sprites and subgroups
//| ==========================================================================
//|
//| Manage a group of sprites and groups and how they are inter-related.
//|
//| .. warning:: This will be changed before 4.0.0. Consider it very experimental.
//|
//| .. class:: Group(*, max_size=4)
//|
//| Create a Group of a given size.
//|
//| :param int max_size: The maximum group size.
//|
STATIC mp_obj_t displayio_group_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *pos_args) {
mp_arg_check_num(n_args, n_kw, 0, 0, true);
mp_map_t kw_args;
mp_map_init_fixed_table(&kw_args, n_kw, pos_args + n_args);
enum { ARG_max_size };
static const mp_arg_t allowed_args[] = {
{ MP_QSTR_max_size, MP_ARG_INT | MP_ARG_KW_ONLY, {.u_int = 4} },
};
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
mp_arg_parse_all(n_args, pos_args, &kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
mp_int_t max_size = args[ARG_max_size].u_int;
if (max_size < 1) {
mp_raise_ValueError(translate("Group must have size at least 1"));
}
displayio_group_t *self = m_new_obj(displayio_group_t);
self->base.type = &displayio_group_type;
common_hal_displayio_group_construct(self, max_size);
return MP_OBJ_FROM_PTR(self);
}
//| .. method:: append(layer)
//|
//| Append a layer to the group. It will be drawn above other layers.
//|
STATIC mp_obj_t displayio_group_obj_append(mp_obj_t self_in, mp_obj_t layer) {
displayio_group_t *self = MP_OBJ_TO_PTR(self_in);
common_hal_displayio_group_append(self, layer);
return mp_const_none;
}
MP_DEFINE_CONST_FUN_OBJ_2(displayio_group_append_obj, displayio_group_obj_append);
STATIC const mp_rom_map_elem_t displayio_group_locals_dict_table[] = {
{ MP_ROM_QSTR(MP_QSTR_append), MP_ROM_PTR(&displayio_group_append_obj) },
};
STATIC MP_DEFINE_CONST_DICT(displayio_group_locals_dict, displayio_group_locals_dict_table);
const mp_obj_type_t displayio_group_type = {
{ &mp_type_type },
.name = MP_QSTR_Group,
.make_new = displayio_group_make_new,
.locals_dict = (mp_obj_dict_t*)&displayio_group_locals_dict,
};

View File

@ -0,0 +1,38 @@
/*
* This file is part of the Micro Python project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2018 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#ifndef MICROPY_INCLUDED_SHARED_BINDINGS_DISPLAYIO_GROUP_H
#define MICROPY_INCLUDED_SHARED_BINDINGS_DISPLAYIO_GROUP_H
#include "shared-module/displayio/Group.h"
extern const mp_obj_type_t displayio_group_type;
void common_hal_displayio_group_construct(displayio_group_t* self, uint32_t max_size);
void common_hal_displayio_group_append(displayio_group_t* self, mp_obj_t layer);
#endif // MICROPY_INCLUDED_SHARED_BINDINGS_DISPLAYIO_GROUP_H

View File

@ -0,0 +1,156 @@
/*
* This file is part of the Micro Python project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2017 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include "shared-bindings/displayio/Palette.h"
#include <stdint.h>
#include "lib/utils/context_manager_helpers.h"
#include "py/binary.h"
#include "py/objproperty.h"
#include "py/runtime.h"
#include "shared-bindings/microcontroller/Pin.h"
#include "shared-bindings/util.h"
#include "supervisor/shared/translate.h"
//| .. currentmodule:: displayio
//|
//| :class:`Palette` -- Stores a mapping from bitmap pixel palette_indexes to display colors
//| =========================================================================================
//|
//| Map a pixel palette_index to a full color. Colors are transformed to the display's format internally to
//| save memory.
//|
//| .. warning:: This will be changed before 4.0.0. Consider it very experimental.
//|
//| .. class:: Palette(color_count)
//|
//| Create a Palette object to store a set number of colors.
//|
//| :param int color_count: The number of colors in the Palette
// TODO(tannewt): Add support for other color formats.
// TODO(tannewt): Add support for 8-bit alpha blending.
//|
STATIC mp_obj_t displayio_palette_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *pos_args) {
mp_arg_check_num(n_args, n_kw, 1, 1, true);
mp_map_t kw_args;
mp_map_init_fixed_table(&kw_args, n_kw, pos_args + n_args);
enum { ARG_color_count };
static const mp_arg_t allowed_args[] = {
{ MP_QSTR_color_count, MP_ARG_INT | MP_ARG_REQUIRED },
};
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
mp_arg_parse_all(n_args, pos_args, &kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
displayio_palette_t *self = m_new_obj(displayio_palette_t);
self->base.type = &displayio_palette_type;
common_hal_displayio_palette_construct(self, args[ARG_color_count].u_int);
return MP_OBJ_FROM_PTR(self);
}
STATIC mp_obj_t palette_subscr(mp_obj_t self_in, mp_obj_t index_in, mp_obj_t value) {
if (value == MP_OBJ_NULL) {
// delete item
return MP_OBJ_NULL; // op not supported
}
// Slicing not supported. Use a duplicate Palette to swap multiple colors atomically.
if (MP_OBJ_IS_TYPE(index_in, &mp_type_slice)) {
return MP_OBJ_NULL;
}
// index read is not supported
if (value == MP_OBJ_SENTINEL) {
return MP_OBJ_NULL;
}
displayio_palette_t *self = MP_OBJ_TO_PTR(self_in);
size_t index = mp_get_index(&displayio_palette_type, self->color_count, index_in, false);
uint32_t color;
mp_int_t int_value;
mp_buffer_info_t bufinfo;
if (mp_get_buffer(value, &bufinfo, MP_BUFFER_READ)) {
if (bufinfo.typecode != 'b' && bufinfo.typecode != 'B' && bufinfo.typecode != BYTEARRAY_TYPECODE) {
mp_raise_ValueError(translate("color buffer must be a bytearray or array of type 'b' or 'B'"));
}
uint8_t* buf = bufinfo.buf;
if (bufinfo.len == 3 || bufinfo.len == 4) {
color = buf[0] << 16 | buf[1] << 8 | buf[2];
} else {
mp_raise_ValueError(translate("color buffer must be 3 bytes (RGB) or 4 bytes (RGB + pad byte)"));
}
} else if (mp_obj_get_int_maybe(value, &int_value)) {
if (int_value < 0 || int_value > 0xffffff) {
mp_raise_TypeError(translate("color must be between 0x000000 and 0xffffff"));
}
color = int_value;
} else {
mp_raise_TypeError(translate("color buffer must be a buffer or int"));
}
common_hal_displayio_palette_set_color(self, index, color);
return mp_const_none;
}
//| .. method:: make_transparent(palette_index)
//|
STATIC mp_obj_t displayio_palette_obj_make_transparent(mp_obj_t self_in, mp_obj_t palette_index_obj) {
displayio_palette_t *self = MP_OBJ_TO_PTR(self_in);
mp_int_t palette_index;
if (!mp_obj_get_int_maybe(palette_index_obj, &palette_index)) {
mp_raise_ValueError(translate("palette_index should be an int"));
}
common_hal_displayio_palette_make_transparent(self, palette_index);
return mp_const_none;
}
MP_DEFINE_CONST_FUN_OBJ_2(displayio_palette_make_transparent_obj, displayio_palette_obj_make_transparent);
//| .. method:: make_opaque(palette_index)
//|
STATIC mp_obj_t displayio_palette_obj_make_opaque(mp_obj_t self_in, mp_obj_t palette_index_obj) {
displayio_palette_t *self = MP_OBJ_TO_PTR(self_in);
mp_int_t palette_index;
if (!mp_obj_get_int_maybe(palette_index_obj, &palette_index)) {
mp_raise_ValueError(translate("palette_index should be an int"));
}
common_hal_displayio_palette_make_opaque(self, palette_index);
return mp_const_none;
}
MP_DEFINE_CONST_FUN_OBJ_2(displayio_palette_make_opaque_obj, displayio_palette_obj_make_opaque);
STATIC const mp_rom_map_elem_t displayio_palette_locals_dict_table[] = {
{ MP_ROM_QSTR(MP_QSTR_make_transparent), MP_ROM_PTR(&displayio_palette_make_transparent_obj) },
{ MP_ROM_QSTR(MP_QSTR_make_opaque), MP_ROM_PTR(&displayio_palette_make_opaque_obj) },
};
STATIC MP_DEFINE_CONST_DICT(displayio_palette_locals_dict, displayio_palette_locals_dict_table);
const mp_obj_type_t displayio_palette_type = {
{ &mp_type_type },
.name = MP_QSTR_Palette,
.make_new = displayio_palette_make_new,
.subscr = palette_subscr,
.locals_dict = (mp_obj_dict_t*)&displayio_palette_locals_dict,
};

View File

@ -0,0 +1,40 @@
/*
* This file is part of the Micro Python project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2018 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#ifndef MICROPY_INCLUDED_SHARED_BINDINGS_DISPLAYIO_PALETTE_H
#define MICROPY_INCLUDED_SHARED_BINDINGS_DISPLAYIO_PALETTE_H
#include "shared-module/displayio/Palette.h"
extern const mp_obj_type_t displayio_palette_type;
void common_hal_displayio_palette_construct(displayio_palette_t* self, uint16_t color_count);
void common_hal_displayio_palette_set_color(displayio_palette_t* self, uint32_t palette_index, uint32_t color);
void common_hal_displayio_palette_make_opaque(displayio_palette_t* self, uint32_t palette_index);
void common_hal_displayio_palette_make_transparent(displayio_palette_t* self, uint32_t palette_index);
#endif // MICROPY_INCLUDED_SHARED_BINDINGS_DISPLAYIO_PALETTE_H

View File

@ -0,0 +1,181 @@
/*
* This file is part of the Micro Python project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2018 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include "shared-bindings/displayio/Sprite.h"
#include <stdint.h>
#include "lib/utils/context_manager_helpers.h"
#include "py/binary.h"
#include "py/objproperty.h"
#include "py/runtime.h"
#include "shared-bindings/displayio/Bitmap.h"
#include "supervisor/shared/translate.h"
void unpack_position(mp_obj_t position_obj, int16_t* x, int16_t* y) {
// TODO(tannewt): Support any value sequence such as bytearray or bytes.
mp_obj_tuple_t *position = MP_OBJ_TO_PTR(position_obj);
if (MP_OBJ_IS_TYPE(position_obj, &mp_type_tuple) && position->len == 2) {
*x = mp_obj_get_int(position->items[0]);
*y = mp_obj_get_int(position->items[1]);
} else if (position != mp_const_none) {
mp_raise_TypeError(translate("position must be 2-tuple"));
}
}
//| .. currentmodule:: displayio
//|
//| :class:`Sprite` -- A particular copy of an image to display
//| ==========================================================================
//|
//| Position a particular image and palette combination.
//|
//| .. warning:: This will be changed before 4.0.0. Consider it very experimental.
//|
//| .. class:: Sprite(bitmap, *, palette, position, width, height)
//|
//| Create a Sprite object
//|
//|
STATIC mp_obj_t displayio_sprite_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *pos_args) {
mp_arg_check_num(n_args, n_kw, 1, 4, true);
mp_map_t kw_args;
mp_map_init_fixed_table(&kw_args, n_kw, pos_args + n_args);
enum { ARG_bitmap, ARG_palette, ARG_position, ARG_width, ARG_height };
static const mp_arg_t allowed_args[] = {
{ MP_QSTR_bitmap, MP_ARG_OBJ | MP_ARG_REQUIRED },
{ MP_QSTR_palette, MP_ARG_OBJ | MP_ARG_KW_ONLY },
{ MP_QSTR_position, MP_ARG_OBJ | MP_ARG_KW_ONLY },
{ MP_QSTR_width, MP_ARG_INT | MP_ARG_KW_ONLY, {.u_int = -1} },
{ MP_QSTR_height, MP_ARG_INT | MP_ARG_KW_ONLY, {.u_int = -1} },
};
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
mp_arg_parse_all(n_args, pos_args, &kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
mp_obj_t bitmap = args[ARG_bitmap].u_obj;
uint16_t width;
uint16_t height;
if (MP_OBJ_IS_TYPE(bitmap, &displayio_bitmap_type)) {
displayio_bitmap_t* bmp = MP_OBJ_TO_PTR(bitmap);
width = bmp->width;
height = bmp->height;
} else {
mp_raise_TypeError(translate("unsupported bitmap type"));
}
int16_t x = 0;
int16_t y = 0;
mp_obj_t position_obj = args[ARG_position].u_obj;
unpack_position(position_obj, &x, &y);
displayio_sprite_t *self = m_new_obj(displayio_sprite_t);
self->base.type = &displayio_sprite_type;
common_hal_displayio_sprite_construct(self, bitmap, args[ARG_palette].u_obj,
width, height, x, y);
return MP_OBJ_FROM_PTR(self);
}
//| .. attribute:: position
//|
//| The position of the top-left corner of the sprite.
//|
STATIC mp_obj_t displayio_sprite_obj_get_position(mp_obj_t self_in) {
displayio_sprite_t *self = MP_OBJ_TO_PTR(self_in);
int16_t x;
int16_t y;
common_hal_displayio_sprite_get_position(self, &x, &y);
mp_obj_t coords[2];
coords[0] = mp_obj_new_int(x);
coords[1] = mp_obj_new_int(y);
return mp_obj_new_tuple(2, coords);
}
MP_DEFINE_CONST_FUN_OBJ_1(displayio_sprite_get_position_obj, displayio_sprite_obj_get_position);
STATIC mp_obj_t displayio_sprite_obj_set_position(mp_obj_t self_in, mp_obj_t value) {
displayio_sprite_t *self = MP_OBJ_TO_PTR(self_in);
int16_t x = 0;
int16_t y = 0;
unpack_position(value, &x, &y);
common_hal_displayio_sprite_set_position(self, x, y);
return mp_const_none;
}
MP_DEFINE_CONST_FUN_OBJ_2(displayio_sprite_set_position_obj, displayio_sprite_obj_set_position);
const mp_obj_property_t displayio_sprite_position_obj = {
.base.type = &mp_type_property,
.proxy = {(mp_obj_t)&displayio_sprite_get_position_obj,
(mp_obj_t)&displayio_sprite_set_position_obj,
(mp_obj_t)&mp_const_none_obj},
};
//| .. attribute:: palette
//|
//| The color palette of the sprite.
//|
STATIC mp_obj_t displayio_sprite_obj_get_palette(mp_obj_t self_in) {
displayio_sprite_t *self = MP_OBJ_TO_PTR(self_in);
return common_hal_displayio_sprite_get_palette(self);
}
MP_DEFINE_CONST_FUN_OBJ_1(displayio_sprite_get_palette_obj, displayio_sprite_obj_get_palette);
STATIC mp_obj_t displayio_sprite_obj_set_palette(mp_obj_t self_in, mp_obj_t palette_in) {
displayio_sprite_t *self = MP_OBJ_TO_PTR(self_in);
if (!MP_OBJ_IS_TYPE(palette_in, &displayio_palette_type)) {
mp_raise_TypeError(translate("palette must be displayio.Palette"));
}
displayio_palette_t *palette = MP_OBJ_TO_PTR(palette_in);
common_hal_displayio_sprite_set_palette(self, palette);
return mp_const_none;
}
MP_DEFINE_CONST_FUN_OBJ_2(displayio_sprite_set_palette_obj, displayio_sprite_obj_set_palette);
const mp_obj_property_t displayio_sprite_palette_obj = {
.base.type = &mp_type_property,
.proxy = {(mp_obj_t)&displayio_sprite_get_palette_obj,
(mp_obj_t)&displayio_sprite_set_palette_obj,
(mp_obj_t)&mp_const_none_obj},
};
STATIC const mp_rom_map_elem_t displayio_sprite_locals_dict_table[] = {
// Properties
{ MP_ROM_QSTR(MP_QSTR_position), MP_ROM_PTR(&displayio_sprite_position_obj) },
{ MP_ROM_QSTR(MP_QSTR_palette), MP_ROM_PTR(&displayio_sprite_palette_obj) },
};
STATIC MP_DEFINE_CONST_DICT(displayio_sprite_locals_dict, displayio_sprite_locals_dict_table);
const mp_obj_type_t displayio_sprite_type = {
{ &mp_type_type },
.name = MP_QSTR_Sprite,
.make_new = displayio_sprite_make_new,
.locals_dict = (mp_obj_dict_t*)&displayio_sprite_locals_dict,
};

View File

@ -0,0 +1,43 @@
/*
* This file is part of the Micro Python project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2018 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#ifndef MICROPY_INCLUDED_SHARED_BINDINGS_DISPLAYIO_SPRITE_H
#define MICROPY_INCLUDED_SHARED_BINDINGS_DISPLAYIO_SPRITE_H
#include "shared-module/displayio/Sprite.h"
extern const mp_obj_type_t displayio_sprite_type;
void common_hal_displayio_sprite_construct(displayio_sprite_t *self, mp_obj_t bitmap,
mp_obj_t palette, uint16_t width, uint16_t height, uint16_t x, uint16_t y);
void common_hal_displayio_sprite_get_position(displayio_sprite_t *self, int16_t* x, int16_t* y);
void common_hal_displayio_sprite_set_position(displayio_sprite_t *self, int16_t x, int16_t y);
displayio_palette_t* common_hal_displayio_sprite_get_palette(displayio_sprite_t *self);
void common_hal_displayio_sprite_set_palette(displayio_sprite_t *self, displayio_palette_t* palette);
#endif // MICROPY_INCLUDED_SHARED_BINDINGS_DISPLAYIO_SPRITE_H

View File

@ -0,0 +1,83 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2018 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include <stdint.h>
#include "py/obj.h"
#include "py/runtime.h"
#include "shared-bindings/displayio/__init__.h"
#include "shared-bindings/displayio/Bitmap.h"
#include "shared-bindings/displayio/FourWire.h"
#include "shared-bindings/displayio/Group.h"
#include "shared-bindings/displayio/Palette.h"
#include "shared-bindings/displayio/Sprite.h"
//| :mod:`displayio` --- Native display driving
//| =========================================================================
//|
//| .. module:: displayio
//| :synopsis: Native helpers for driving displays
//| :platform: SAMD21, SAMD51
//|
//| The `displayio` module contains classes to manage display output
//| including synchronizing with refresh rates and partial updating. It does
//| not include display initialization commands. It should live in a Python
//| driver for use when a display is connected to a board. It should also be
//| built into the board init when the board has the display on it.
//|
//| .. warning:: This will be changed before 4.0.0. Consider it very experimental.
//|
//| Libraries
//|
//| .. toctree::
//| :maxdepth: 3
//|
//| Bitmap
//| FourWire
//| Group
//| Palette
//| Sprite
//|
//| All libraries change hardware state but are never deinit
//|
STATIC const mp_rom_map_elem_t displayio_module_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_displayio) },
{ MP_ROM_QSTR(MP_QSTR_Bitmap), MP_ROM_PTR(&displayio_bitmap_type) },
{ MP_ROM_QSTR(MP_QSTR_Group), MP_ROM_PTR(&displayio_group_type) },
{ MP_ROM_QSTR(MP_QSTR_Palette), MP_ROM_PTR(&displayio_palette_type) },
{ MP_ROM_QSTR(MP_QSTR_Sprite), MP_ROM_PTR(&displayio_sprite_type) },
{ MP_ROM_QSTR(MP_QSTR_FourWire), MP_ROM_PTR(&displayio_fourwire_type) },
};
STATIC MP_DEFINE_CONST_DICT(displayio_module_globals, displayio_module_globals_table);
const mp_obj_module_t displayio_module = {
.base = { &mp_type_module },
.globals = (mp_obj_dict_t*)&displayio_module_globals,
};

View File

@ -0,0 +1,34 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2018 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#ifndef MICROPY_INCLUDED_SHARED_BINDINGS_DISPLAYIO___INIT___H
#define MICROPY_INCLUDED_SHARED_BINDINGS_DISPLAYIO___INIT___H
#include "py/obj.h"
// Nothing now.
#endif // MICROPY_INCLUDED_SHARED_BINDINGS_DISPLAYIO___INIT___H

View File

@ -0,0 +1,101 @@
/*
* This file is part of the Micro Python project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2018 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include "shared-bindings/displayio/Bitmap.h"
#include <string.h>
#include "py/runtime.h"
void common_hal_displayio_bitmap_construct(displayio_bitmap_t *self, uint32_t width,
uint32_t height, uint32_t bits_per_value) {
uint32_t row_width = width * bits_per_value;
// word align
if (row_width % 32 != 0) {
self->stride = (row_width / 32 + 1);
} else {
self->stride = row_width / 32;
}
self->width = width;
self->height = height;
self->data = m_malloc(self->stride * height * sizeof(uint32_t), false);
self->bits_per_value = bits_per_value;
if (bits_per_value > 8) {
mp_raise_NotImplementedError(translate("Only bit maps of 8 bit color or less are supported"));
}
// Division and modulus can be slow because it has to handle any integer. We know bits_per_value
// is a power of two. We divide and mod by bits_per_value to compute the offset into the byte
// array. So, we can the offset computation to simplify to a shift for division and mask for mod.
self->x_shift = 0; // Used to divide the index by the number of pixels per word. Its used in a
// shift which effectively divides by 2 ** x_shift.
uint32_t power_of_two = 1;
while (power_of_two < 32 / bits_per_value ) {
self->x_shift++;
power_of_two <<= 1;
}
self->x_mask = (1 << self->x_shift) - 1; // Used as a modulus on the x value
self->bitmask = (1 << bits_per_value) - 1;
}
void common_hal_displayio_bitmap_load_row(displayio_bitmap_t *self, uint16_t y, uint8_t* data, uint16_t len) {
if (len != self->stride * sizeof(uint32_t)) {
mp_raise_ValueError(translate("row must be packed and word aligned"));
}
uint32_t* row_value = self->data + (y * self->stride);
// Do the memcpy ourselves since we may want to flip endianness.
for (uint32_t i = 0; i < self->stride; i++) {
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wcast-align"
uint32_t value = ((uint32_t *)data)[i];
#pragma GCC diagnostic pop
if (self->bits_per_value < 16) {
value = ((value >> 24) & 0xff) |
((value << 8) & 0xff0000) |
((value >> 8) & 0xff00) |
((value << 24) & 0xff000000);
}
*row_value = value;
row_value++;
}
}
uint32_t common_hal_displayio_bitmap_get_pixel(displayio_bitmap_t *self, int16_t x, int16_t y) {
if (x >= self->width || x < 0 || y >= self->height || y < 0) {
return 0;
}
int32_t row_start = y * self->stride;
if (self->bits_per_value < 8) {
uint32_t word = self->data[row_start + (x >> self->x_shift)];
return (word >> (32 - ((x & self->x_mask) + 1) * self->bits_per_value)) & self->bitmask;
} else {
uint32_t bytes_per_value = self->bits_per_value / 8;
return self->data[row_start + x * bytes_per_value];
}
}

View File

@ -0,0 +1,47 @@
/*
* This file is part of the Micro Python project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2018 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#ifndef MICROPY_INCLUDED_SHARED_MODULE_DISPLAYIO_BITMAP_H
#define MICROPY_INCLUDED_SHARED_MODULE_DISPLAYIO_BITMAP_H
#include <stdbool.h>
#include <stdint.h>
#include "py/obj.h"
typedef struct {
mp_obj_base_t base;
uint16_t width;
uint16_t height;
uint32_t* data;
uint16_t stride; // words
uint8_t bits_per_value;
uint8_t x_shift;
uint8_t x_mask;
uint16_t bitmask;
} displayio_bitmap_t;
#endif // MICROPY_INCLUDED_SHARED_MODULE_DISPLAYIO_BITMAP_H

View File

@ -0,0 +1,88 @@
/*
* This file is part of the Micro Python project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2018 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include "shared-bindings/displayio/Group.h"
#include "py/runtime.h"
#include "shared-bindings/displayio/Sprite.h"
void common_hal_displayio_group_construct(displayio_group_t* self, uint32_t max_size) {
mp_obj_t* children = m_new(mp_obj_t, max_size);
displayio_group_construct(self, children, max_size);
}
void common_hal_displayio_group_append(displayio_group_t* self, mp_obj_t layer) {
if (self->size == self->max_size) {
mp_raise_RuntimeError(translate("Group full"));
}
self->children[self->size] = layer;
self->size++;
}
void displayio_group_construct(displayio_group_t* self, mp_obj_t* child_array, uint32_t max_size) {
self->x = 0;
self->y = 1;
self->children = child_array;
self->max_size = max_size;
}
bool displayio_group_get_pixel(displayio_group_t *self, int16_t x, int16_t y, uint16_t* pixel) {
x -= self->x;
y -= self->y;
for (int32_t i = self->size - 1; i >= 0 ; i--) {
mp_obj_t layer = self->children[i];
if (MP_OBJ_IS_TYPE(layer, &displayio_sprite_type)) {
if (displayio_sprite_get_pixel(layer, x, y, pixel)) {
return true;
}
}
// TODO: Tiled layer
}
return false;
}
bool displayio_group_needs_refresh(displayio_group_t *self) {
for (int32_t i = self->size - 1; i >= 0 ; i--) {
mp_obj_t layer = self->children[i];
if (MP_OBJ_IS_TYPE(layer, &displayio_sprite_type)) {
if (displayio_sprite_needs_refresh(layer)) {
return true;
}
}
// TODO: Tiled layer
}
return false;
}
void displayio_group_finish_refresh(displayio_group_t *self) {
for (int32_t i = self->size - 1; i >= 0 ; i--) {
mp_obj_t layer = self->children[i];
if (MP_OBJ_IS_TYPE(layer, &displayio_sprite_type)) {
displayio_sprite_finish_refresh(layer);
}
// TODO: Tiled layer
}
}

View File

@ -0,0 +1,53 @@
/*
* This file is part of the Micro Python project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2018 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#ifndef MICROPY_INCLUDED_SHARED_MODULE_DISPLAYIO_GROUP_H
#define MICROPY_INCLUDED_SHARED_MODULE_DISPLAYIO_GROUP_H
#include <stdbool.h>
#include <stdint.h>
#include "py/obj.h"
typedef struct {
mp_obj_base_t base;
int16_t x;
int16_t y;
uint16_t size;
uint16_t max_size;
mp_obj_t* children;
} displayio_group_t;
void common_hal_displayio_group_construct(displayio_group_t* self, uint32_t max_size);
void common_hal_displayio_group_append(displayio_group_t* self, mp_obj_t layer);
void displayio_group_construct(displayio_group_t* self, mp_obj_t* child_array, uint32_t max_size);
bool displayio_group_get_pixel(displayio_group_t *group, int16_t x, int16_t y, uint16_t *pixel);
bool displayio_group_needs_refresh(displayio_group_t *self);
void displayio_group_finish_refresh(displayio_group_t *self);
#endif // MICROPY_INCLUDED_SHARED_MODULE_DISPLAYIO_GROUP_H

View File

@ -0,0 +1,78 @@
/*
* This file is part of the Micro Python project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2018 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include "shared-bindings/displayio/Palette.h"
void common_hal_displayio_palette_construct(displayio_palette_t* self, uint16_t color_count) {
self->color_count = color_count;
self->colors = (uint32_t *) m_malloc(color_count * sizeof(uint16_t), false);
uint32_t opaque_byte_count = color_count / 8;
if (color_count % 8 > 0) {
opaque_byte_count += 1;
}
self->opaque = (uint32_t *) m_malloc(opaque_byte_count, false);
}
void common_hal_displayio_palette_make_opaque(displayio_palette_t* self, uint32_t palette_index) {
self->opaque[palette_index / 32] &= ~(0x1 << (palette_index % 32));
}
void common_hal_displayio_palette_make_transparent(displayio_palette_t* self, uint32_t palette_index) {
self->opaque[palette_index / 32] |= (0x1 << (palette_index % 32));
}
void common_hal_displayio_palette_set_color(displayio_palette_t* self, uint32_t palette_index, uint32_t color) {
uint32_t shift = (palette_index % 2) * 16;
uint32_t masked = self->colors[palette_index / 2] & ~(0xffff << shift);
uint32_t b5 = (color >> 19);
uint32_t g6 = (color >> 10) & 0x3f;
uint32_t r5 = (color >> 3) & 0x1f;
uint32_t packed = r5 << 11 | g6 << 5 | b5;
// swap bytes
packed = __builtin_bswap16(packed);
self->colors[palette_index / 2] = masked | packed << shift;
self->needs_refresh = true;
}
bool displayio_palette_get_color(displayio_palette_t *self, uint32_t palette_index, uint16_t* color) {
if (palette_index > self->color_count) {
return false;
}
if ((self->opaque[palette_index / 32] & (0x1 << (palette_index % 32))) != 0) {
return false;
}
*color = (self->colors[palette_index / 2] >> (16 * (palette_index % 2))) & 0xffff;
return true;
}
bool displayio_palette_needs_refresh(displayio_palette_t *self) {
return self->needs_refresh;
}
void displayio_palette_finish_refresh(displayio_palette_t *self) {
self->needs_refresh = false;
}

View File

@ -0,0 +1,47 @@
/*
* This file is part of the Micro Python project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2018 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#ifndef MICROPY_INCLUDED_SHARED_MODULE_DISPLAYIO_PALETTE_H
#define MICROPY_INCLUDED_SHARED_MODULE_DISPLAYIO_PALETTE_H
#include <stdbool.h>
#include <stdint.h>
#include "py/obj.h"
typedef struct {
mp_obj_base_t base;
uint32_t* opaque;
uint32_t* colors;
uint8_t color_count;
bool needs_refresh;
} displayio_palette_t;
bool displayio_palette_get_color(displayio_palette_t *palette, uint32_t palette_index, uint16_t* color);
bool displayio_palette_needs_refresh(displayio_palette_t *self);
void displayio_palette_finish_refresh(displayio_palette_t *self);
#endif // MICROPY_INCLUDED_SHARED_MODULE_DISPLAYIO_PALLETE_H

View File

@ -0,0 +1,90 @@
/*
* This file is part of the Micro Python project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2018 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include "shared-bindings/displayio/Sprite.h"
#include "shared-bindings/displayio/Bitmap.h"
void common_hal_displayio_sprite_construct(displayio_sprite_t *self, mp_obj_t bitmap,
mp_obj_t palette, uint16_t width, uint16_t height, uint16_t x, uint16_t y) {
self->width = width;
self->height = height;
self->bitmap = bitmap;
self->palette = palette;
self->x = x;
self->y = y;
}
void common_hal_displayio_sprite_get_position(displayio_sprite_t *self, int16_t* x, int16_t* y) {
*x = self->x;
*y = self->y;
}
void common_hal_displayio_sprite_set_position(displayio_sprite_t *self, int16_t x, int16_t y) {
self->x = x;
self->y = y;
self->needs_refresh = true;
}
displayio_palette_t* common_hal_displayio_sprite_get_palette(displayio_sprite_t *self) {
return self->palette;
}
void common_hal_displayio_sprite_set_palette(displayio_sprite_t *self, displayio_palette_t* palette) {
self->palette = palette;
self->needs_refresh = true;
}
bool displayio_sprite_get_pixel(displayio_sprite_t *self, int16_t x, int16_t y, uint16_t* pixel) {
x -= self->x;
y -= self->y;
if (y < 0 || y >= self->height || x >= self->width || x < 0) {
return false;
}
uint32_t value = common_hal_displayio_bitmap_get_pixel(self->bitmap, x, y);
if (self->palette == mp_const_none) {
*pixel = value;
return true;
} else if (MP_OBJ_IS_TYPE(self->palette, &displayio_palette_type) && displayio_palette_get_color(self->palette, value, pixel)) {
return true;
}
return false;
}
bool displayio_sprite_needs_refresh(displayio_sprite_t *self) {
return self->needs_refresh || displayio_palette_needs_refresh(self->palette);
}
void displayio_sprite_finish_refresh(displayio_sprite_t *self) {
self->needs_refresh = false;
displayio_palette_finish_refresh(self->palette);
// TODO(tannewt): We could double buffer changes to position and move them over here.
// That way they won't change during a refresh and tear.
}

View File

@ -0,0 +1,51 @@
/*
* This file is part of the Micro Python project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2018 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#ifndef MICROPY_INCLUDED_SHARED_MODULE_DISPLAYIO_SPRITE_H
#define MICROPY_INCLUDED_SHARED_MODULE_DISPLAYIO_SPRITE_H
#include <stdbool.h>
#include <stdint.h>
#include "py/obj.h"
#include "shared-bindings/displayio/Palette.h"
typedef struct {
mp_obj_base_t base;
mp_obj_t bitmap;
displayio_palette_t* palette;
uint16_t x;
uint16_t y;
uint16_t width;
uint16_t height;
bool needs_refresh;
} displayio_sprite_t;
bool displayio_sprite_get_pixel(displayio_sprite_t *sprite, int16_t x, int16_t y, uint16_t *pixel);
bool displayio_sprite_needs_refresh(displayio_sprite_t *self);
void displayio_sprite_finish_refresh(displayio_sprite_t *self);
#endif // MICROPY_INCLUDED_SHARED_MODULE_DISPLAYIO_SPRITE_H

View File

@ -0,0 +1,80 @@
#include "shared-bindings/displayio/FourWire.h"
extern displayio_fourwire_obj_t board_display_obj;
void start_region_update(displayio_fourwire_obj_t* display, uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1) {
// TODO delegate between different display types
displayio_fourwire_start_region_update(display, x0, y0, x1, y1);
}
void finish_region_update(displayio_fourwire_obj_t* display) {
// TODO delegate between different display types
displayio_fourwire_finish_region_update(display);
}
void finish_refresh(displayio_fourwire_obj_t* display) {
// TODO delegate between different display types
displayio_fourwire_finish_refresh(display);
}
bool frame_queued(displayio_fourwire_obj_t* display) {
// TODO delegate between different display types
return displayio_fourwire_frame_queued(display);
}
bool refresh_queued(displayio_fourwire_obj_t* display) {
// TODO delegate between different display types
return displayio_fourwire_refresh_queued(display);
}
bool send_pixels(displayio_fourwire_obj_t* display, uint32_t* pixels, uint32_t length) {
// TODO delegate between different display types
return displayio_fourwire_send_pixels(display, pixels, length);
}
void displayio_refresh_display(void) {
displayio_fourwire_obj_t* display = &board_display_obj;
if (!frame_queued(display)) {
return;
}
if (refresh_queued(display)) {
// We compute the pixels
uint16_t x0 = 0;
uint16_t y0 = 0;
uint16_t x1 = display->width;
uint16_t y1 = display->height;
size_t index = 0;
//size_t row_size = (x1 - x0);
uint16_t buffer_size = 256;
uint32_t buffer[buffer_size / 2];
start_region_update(display, x0, y0, x1, y1);
for (uint16_t y = y0; y < y1; ++y) {
for (uint16_t x = x0; x < x1; ++x) {
uint16_t* pixel = &(((uint16_t*)buffer)[index]);
*pixel = 0;
if (display->current_group != NULL) {
displayio_group_get_pixel(display->current_group, x, y, pixel);
}
index += 1;
// The buffer is full, send it.
if (index >= buffer_size) {
if (!send_pixels(display, buffer, buffer_size / 2)) {
finish_region_update(display);
return;
}
index = 0;
}
}
}
// Send the remaining data.
if (index && !send_pixels(display, buffer, index * 2)) {
finish_region_update(display);
return;
}
finish_region_update(display);
}
finish_refresh(display);
}

View File

@ -0,0 +1,32 @@
/*
* This file is part of the Micro Python project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2018 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#ifndef MICROPY_INCLUDED_SHARED_BINDINGS_DISPLAYIO___INIT___H
#define MICROPY_INCLUDED_SHARED_BINDINGS_DISPLAYIO___INIT___H
void displayio_refresh_display(void);
#endif // MICROPY_INCLUDED_SHARED_BINDINGS_DISPLAYIO___INIT___H

View File

@ -0,0 +1,37 @@
/*
* This file is part of the Micro Python project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2018 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#ifndef MICROPY_INCLUDED_SHARED_BINDINGS_DISPLAYIO_MIPI_CONSTANTS_H
#define MICROPY_INCLUDED_SHARED_BINDINGS_DISPLAYIO_MIPI_CONSTANTS_H
// More info here: https://www.tonylabs.com/wp-content/uploads/MIPI_DCS_specification_v1.02.00.pdf
enum mipi_command {
MIPI_COMMAND_SET_COLUMN_ADDRESS = 0x2a,
MIPI_COMMAND_SET_PAGE_ADDRESS = 0x2b,
MIPI_COMMAND_WRITE_MEMORY_START = 0x2c,
};
#endif // MICROPY_INCLUDED_SHARED_BINDINGS_DISPLAYIO_MIPI_CONSTANTS_H