Commit Graph

14791 Commits

Author SHA1 Message Date
Scott Shawcroft 19dc219ff7
Merge pull request #2351 from hierophect/stm32-i2c-never-reset
STM32: Add I2C never reset
2019-12-04 10:26:51 -08:00
Jeff Epler e2f319fc6b Update translations 2019-12-04 09:59:00 -06:00
Hierophect 3de1b9edbe Merge remote-tracking branch 'upstream/master' into stm32-displayio 2019-12-04 10:50:14 -05:00
Jeff Epler feb8eb935b audiosample: convert to use a protocol
This eases addition of new sample sources, since the manual virtual
function dispatch functions are just calls via a protocol
2019-12-04 09:31:52 -06:00
Jeff Epler 238e121236 protocols: Allow them to be (optionally) type-safe
Protocols are nice, but there is no way for C code to verify whether
a type's "protocol" structure actually implements some particular
protocol.  As a result, you can pass an object that implements the
"vfs" protocol to one that expects the "stream" protocol, and the
opposite of awesomeness ensues.

This patch adds an OPTIONAL (but enabled by default) protocol identifier
as the first member of any protocol structure.  This identifier is
simply a unique QSTR chosen by the protocol designer and used by each
protocol implementer.  When checking for protocol support, instead of
just checking whether the object's type has a non-NULL protocol field,
use `mp_proto_get` which implements the protocol check when possible.

The existing protocols are now named:
    protocol_framebuf
    protocol_i2c
    protocol_pin
    protocol_stream
    protocol_spi
    protocol_vfs
(most of these are unused in CP and are just inherited from MP; vfs and
stream are definitely used though)

I did not find any crashing examples, but here's one to give a flavor of what
is improved, using `micropython_coverage`.  Before the change,
the vfs "ioctl" protocol is invoked, and the result is not intelligible
as json (but it could have resulted in a hard fault, potentially):

    >>> import uos, ujson
    >>> u = uos.VfsPosix('/tmp')
    >>> ujson.load(u)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ValueError: syntax error in JSON

After the change, the vfs object is correctly detected as not supporting
the stream protocol:
    >>> ujson.load(p)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    OSError: stream operation not supported
2019-12-04 09:29:57 -06:00
Hierophect e6b45656f9 Add module and empty parallelbus 2019-12-03 17:18:42 -05:00
Hierophect 012b3bdf18 Add I2C never reset, SPI bugfix 2019-12-03 16:18:49 -05:00
Hierophect 45a6b03d40 copy from busted branch 2019-12-03 15:30:12 -05:00
Scott Shawcroft 15886b1505
Merge pull request #2345 from jepler/compressed-unicode
translation: Compress as unicode, not bytes
2019-12-02 17:11:49 -08:00
Scott Shawcroft fce81e6868
Merge pull request #2297 from jepler/tick-refactor
Call background tasks only once per ms
2019-12-02 16:45:51 -08:00
Scott Shawcroft e1a904f74a
Merge pull request #2306 from jepler/gcc9
build.yml: Use a newer build toolchain
2019-12-02 16:04:52 -08:00
Scott Shawcroft dd30a7fe88
Merge pull request #2344 from hexthat/patch-5
Update zh_Latn_pinyin.po
2019-12-02 14:58:30 -08:00
Jeff Epler 1a0dcb5caa makeqstrdata: reclaim some more bytes on some translations
If a translation only has unicode code points 255 and below, the "values"
array can be 8 bits instead of 16 bits.  This reclaims some code size,
e.g., in a local build, trinket_m0 / en_US reclaimed 112 bytes and de_DE
reclaimed 104 bytes.  However, languages like zh_Latn_pinyin, which use
code points above 255, did not benefit.
2019-12-02 14:49:23 -06:00
Roy Hooper 0d267eaee1 fix compile fails 2019-12-02 14:25:57 -05:00
Roy Hooper 659dcce635 run translate 2019-12-02 14:07:46 -05:00
Roy Hooper a4bbf35092 Merge branch 'master' into new-pixelbuf-api 2019-12-02 14:06:33 -05:00
Hierophect 12737e2821 remove F401 additions to streamline 2019-12-02 12:28:48 -05:00
Jeff Epler 879e1041c9 makeqstrdata: fix printing of 'increased length' message 2019-12-02 10:18:48 -06:00
Jeff Epler e06a3bbceb translation: Compress as unicode, not bytes
By treating each unicode code-point as a single entity for huffman
compression, the overall compression rate can be somewhat improved
without changing the algorithm.  On the decompression side, when
compressed values above 127 are encountered, they need to be
converted from a 16-bit Unicode code point into a UTF-8 byte
sequence.

Doing this returns approximately 1.5kB of flash storage with the
zh_Latn_pinyin translation. (292 -> 1768 bytes remaining in my build
of trinket_m0)

Other "more ASCII" translations benefit less, and in fact
zh_Latn_pinyin is no longer the most constrained translation!
(de_DE 1156 -> 1384 bytes free in flash, I didn't check others
before pushing for CI)

English is slightly pessimized, 2840 -> 2788 bytes, probably mostly
because the "values" array was changed from uint8_t to uint16_t,
which is strictly not required for an all-ASCII translation.  This
could probably be avoided in this case, but as English is not the
most constrained translation it doesn't really matter.

Testing performed: built for feather nRF52840 express and trinket m0
in English and zh_Latn_pinyin; ran and verified the localized
messages such as
    Àn xià rènhé jiàn jìnrù REPL. Shǐyòng CTRL-D chóngxīn jiāzài.
and
    Press any key to enter the REPL. Use CTRL-D to reload.
were properly displayed.
2019-12-02 09:46:46 -06:00
Jeff Epler 002f5c0f1c samd: trinket_m0: make board fit again 2019-12-02 08:25:48 -06:00
Jeff Epler 899202aca7
Merge branch 'master' into gcc9 2019-12-02 07:27:03 -06:00
hexthat 5a49e58fb4
Update zh_Latn_pinyin.po
Added Translations
2019-12-01 09:38:39 -08:00
Jeff Epler 95d9c49e43 Merge remote-tracking branch 'origin/master' into tick-refactor 2019-11-29 11:27:09 -06:00
Jeff Epler d843156a5e samd: Consolidate small build optimization flags
.. inline-unit-growth was the same across all boards, and the highest
max-inline-insns-auto parameter was shared across 2 of 5 boards, so it's
worth a little work to follow the DRY principle
2019-11-29 10:51:16 -06:00
Scott Shawcroft 83ecb1b65e
Merge pull request #2331 from dhalbert/uart-blocking-and-timeout
make UART.write be blocking on SAMD; add timeout property
2019-11-27 15:36:04 -08:00
Dan Halbert ae52ec7c85 make translate again 2019-11-27 14:54:35 -05:00
Dan Halbert d089f16656 'seconds' 2019-11-27 14:49:39 -05:00
Dan Halbert dd6dfeb30a Squeeze pyruler zh_Latn_pinyin 2019-11-27 14:47:35 -05:00
Dan Halbert 778a7a73e5 make translate 2019-11-27 13:13:29 -05:00
Dan Halbert b32a9192df make UART.write be blocking on SAMD; add timeout property 2019-11-27 13:05:29 -05:00
Jeff Epler d9c808d938
Merge pull request #2299 from iayanpahwa/sample-code-file-supervisor
Supervisor: create code.py file with sample code
2019-11-27 08:49:00 -06:00
Roy Hooper a9624fff25 add show 2019-11-26 21:28:41 -05:00
Scott Shawcroft cc008598d0
Merge pull request #2282 from theacodes/native-if-available
Make the @micropython.native decorator no-op if support isn't enabled
2019-11-26 15:52:53 -08:00
Roy Hooper 56720eae0a remove unnecessary intermediate mp_obj_subscr wrapper 2019-11-26 18:39:08 -05:00
Roy Hooper 0b0aa5c5cf Undo github workflow workaround 2019-11-26 18:19:48 -05:00
Dan Halbert f7426e0e61
Merge pull request #2330 from tannewt/epaper_gc_fix
Fix ePaper so it works after a GC.
2019-11-26 16:37:02 -05:00
Scott Shawcroft 3fc58cee38
Merge remote-tracking branch 'adafruit/master' into support_extended_advertising 2019-11-26 13:12:43 -08:00
Thea Flowers 84e1d7f304
Make the @micropython.native decorator no-op if support isn't enabled
When adding the ability for boards to turn on the `@micropython.native`, `viper`, and `asm_thumb` decorators it was pointed out that it's somewhat awkward to write libraries and drivers that can take advantage of this since the decorators raise `SyntaxErrors` if they aren't enabled. In the case of `viper` and `asm_thumb` this behavior makes sense as they require writing non-normative code. Drivers could have a normal and viper/thumb implementation and implement them as such:

```python
try:
    import _viper_impl as _impl
except SyntaxError:
    import _python_impl as _impl

def do_thing():
    return _impl.do_thing()
```

For `native`, however, this behavior and the pattern to work around it is less than ideal. Since `native` code should also be valid Python code (although not necessarily the other way around) using the pattern above means *duplicating* the Python implementation and adding `@micropython.native` in the code. This is an unnecessary maintenance burden.

This commit *modifies* the behavior of the `@micropython.native` decorator. On boards with `CIRCUITPY_ENABLE_MPY_NATIVE` turned on it operates as usual. On boards with it turned off it does *nothing*- it doesn't raise a `SyntaxError` and doesn't apply optimizations. This means we can write our drivers/libraries once and take advantage of speedups on boards where they are enabled.
2019-11-26 13:09:30 -08:00
Scott Shawcroft d32dc814d3
Fix ePaper so it works after a GC.
We weren't correctly collecting the start and stop sequences. As
a result, the GC would free the space and allocate other info
there.

Thanks to JacobT on Discord for the bug report!
2019-11-26 12:48:36 -08:00
Dan Halbert e560b419f8
Merge pull request #2325 from sarfata/sarfata/add-shirtty-master
Add shIRtty board
2019-11-26 15:23:56 -05:00
Dan Halbert 97d90c6039
Merge pull request #2329 from theacodes/set-winterbloom-sol-usb-name
Set USB_INTERFACE_NAME for winterbloom_sol
2019-11-26 15:17:14 -05:00
Dan Halbert 5b412362c5
Merge pull request #2328 from adafruit/tannewt-patch-1
Remove DotStar from pIRkey M0 for now to free up space
2019-11-26 14:47:58 -05:00
Thea Flowers e77046d49b
Set USB_INTERFACE_NAME for winterbloom_sol 2019-11-26 10:59:12 -08:00
Thomas Sarlandie 2647ea0754 fix: disable touchio to save some space 2019-11-26 19:26:18 +01:00
Scott Shawcroft 8d7c58f82e
Merge pull request #2327 from jepler/issue2326
Make time.time_tuple constructor more CPython3 compatible
2019-11-26 09:38:26 -08:00
Scott Shawcroft 58ad38a88e
Remove DotStar from pIRkey M0 for now to free up space
Once we use PixelBuf, the library will be much smaller.
2019-11-26 09:31:44 -08:00
Jeff Epler 82f55dc046 atmel-samd: reduce inlining on constrained boards again
pewpew10, pirkey_m0, and uchip all fit now.  However, pirkey_m0
now has just 76 bytes flash available.
2019-11-26 08:50:55 -06:00
Jeff Epler 3ed6de7baf atmel-samd: reduce inlining on pyruler again
By tweaking the optimizer flags further, this build also fits
2019-11-26 08:50:55 -06:00
Jeff Epler 2e4a6b94e7 atmel-samd: get most constrained m0 builds to work again
By tweaking the optimizer flags, we can get back a few hundred bytes
and allow these builds to work with the gcc9 compiler.
2019-11-26 08:50:45 -06:00
Jeff Epler e188ae8b23 time: struct_time: allow construction like a namedtuple, too
Whenever there is more than one argument, delegate the operation to
namedtuple_make_new.  This allows other circuitpython-compatible
idioms, like with keywords
    time.struct_time(tm_year=2000, tm_mon=1, tm_mday=1, tm_hour=0,
        tm_min=0, tm_sec=14, tm_wday=5, tm_yday=5, tm_isdst=-1)
with 9 positional arguments, etc.

The only vaguely plausible CPython behavior still not permitted in
CircuitPython that I found is constructing a timetuple from a length-9
list, a la
    time.struct_time(list(time.localtime())

Even better, by getting rid of an error message, the build shrinks a
tiny bit.
2019-11-26 08:45:44 -06:00