tag:github.com,2008:https://github.com/PaulCampbell/micropython-with-esp32-cam/releasesRelease notes from micropython-with-esp32-cam2019-01-25T13:56:52Ztag:github.com,2008:Repository/247252679/v1.102019-01-25T13:56:52Zv1.10: Vast improvements to native emitter, new nrf port, unified documentation<p>In this release there are a wide range of improvements and additions to<br>
both the core and the ports. In the core the main improvement was to the<br>
native emitter to have much more comprehensive support for general Python<br>
features, such as generators and complex exception handling, and the<br>
generated machine code is smaller and retains its efficiency. Elsewhere,<br>
fuzzy testing was used to find and eliminate some corner-case bugs, user<br>
classes were optimised when they don't use special accessors, underscores<br>
in numeric literals are now supported (PEP515), and the uio.IOBase class<br>
was added to allow user defined streams.</p>
<p>For the extended modules there is now a VfsPosix filesystem component,<br>
a new ucryptolib module with AES support, addition of ure.sub() and of<br>
uhashlib.md5, and the lwIP socket implementation now has working TCP<br>
listen/accept backlog.</p>
<p>Compared to the last release the minimal baseline core code size is reduced<br>
by about 2.2%, down by roughly 1500 bytes for bare-arm port and 3500 bytes<br>
for minimal x86 port. Most other ports have increased in size due to the<br>
addition of new features (eg ucryptolib, ure.sub).</p>
<p>The stm32 port sees the introduction of a new bootloader -- mboot -- which<br>
supports DFU upload via USB FS, USB HS, as well as a custom I2C protocol,<br>
and also support to program external SPI flash. There is significant<br>
refactoring of the USB device driver, improved VCP throughput, and support<br>
for 2x VCP interfaces on the one USB device. lwIP has been integrated, and<br>
support added for SDRAM. Cortex-M0 CPUs are now supported along with<br>
STM32F0 MCUs.</p>
<p>For the esp8266 port the heap is increased by 2kbytes, the radio is<br>
automatically put to sleep if no WLAN interfaces are active, and the UART<br>
can now be disconnected from the REPL and its RX buffer length configured.<br>
Upon soft-reset sockets are now cleaned up.</p>
<p>The esp32 port has added support for external SPI RAM, PPPoS functionality,<br>
improved performance and stability when using threads, and other general<br>
bug fixes.</p>
<p>There is a new nrf port for Nordic MCUs, currently supporting nRF51x and<br>
nRF52x chips.</p>
<p>The docs have now been unified so there is just one set of documentation<br>
covering all ports. And initial documentation for the esp32 port is added.</p>
<p>There are two changes at the Python API level that are not backwards with<br>
previous versions:</p>
<ul>
<li>uos.dupterm now requires that a stream passed to it is derived from<br>
uio.IOBase (or is a native stream object).</li>
<li>The esp32 neopixel driver has had its default timing changed from 400kHz<br>
to 800kHz; existing code that didn't explicitly specify the "timing"<br>
parameter in the NeoPixel constructor may need to be updated to specify<br>
this as "timing=0" to get 400kHz timing.</li>
</ul>
<p>A detailed list of changes follows.</p>
<p>py core:</p>
<ul>
<li>mpconfig.h: be stricter when autodetecting machine endianness</li>
<li>mpstate.h: adjust start of root pointer section to exclude non-ptrs</li>
<li>nlrx86: use naked attribute on nlr_push for gcc 8.0 and higher</li>
<li>vm: adjust #if logic for gil_divisor so braces are balanced</li>
<li>objfun: fix variable name in DECODE_CODESTATE_SIZE() macro</li>
<li>vm: use enum names instead of magic numbers in multi-opcode dispatch</li>
<li>vm: improve performance of opcode dispatch when using switch stmt</li>
<li>repl: fix handling of unmatched brackets and unfinished quotes</li>
<li>misc.h: add MP_STATIC_ASSERT macro to do static assertions</li>
<li>compile: change comment about ITER_BUF_NSLOTS to a static assertion</li>
<li>emitbc: avoid undefined behavior calling memset() with NULL 1st arg</li>
<li>parsenum: use int instead of mp_int_t for parsing float exponent</li>
<li>parsenum: avoid undefined behavior parsing floats with large exponents</li>
<li>objfloat: fix undefined shifting behavior in high-quality float hash</li>
<li>mpz: avoid undefined behavior at integer overflow in mpz_hash</li>
<li>objfloat: fix undefined integer behavior hashing negative zero</li>
<li>gc: when GC threshold is hit don't unnecessarily collect twice</li>
<li>parsenum: adjust braces so they are balanced</li>
<li>modbuiltins: add support for rounding integers</li>
<li>objgenerator: save state in old_globals instead of local variable</li>
<li>objgenerator: protect against reentering a generator</li>
<li>emit: combine fast and deref into one function for load/store/delete</li>
<li>emit: combine yield value and yield-from emit funcs into one</li>
<li>emit: combine build tuple/list/map emit funcs into one</li>
<li>emit: combine name and global into one func for load/store/delete</li>
<li>emit: combine load/store/delete subscr into one emit function</li>
<li>emit: combine load/store/delete attr into one emit function</li>
<li>emit: combine break_loop and continue_loop into one emit function</li>
<li>emit: combine import from/name/star into one emit function</li>
<li>emit: merge build set/slice into existing build emit function</li>
<li>emit: combine setup with/except/finally into one emit function</li>
<li>objtype: fix assertion failures in mp_obj_new_type by checking types</li>
<li>objtype: fix assertion failures in super_attr by checking type</li>
<li>stream: move definition of mp_stream_p_t from obj.h to stream.h</li>
<li>reader: allow MICROPY_VFS_POSIX to work with MICROPY_READER_POSIX</li>
<li>mpconfig.h: add default MICROPY_VFS_FAT config value</li>
<li>obj.h: introduce a "flags" entry in mp_obj_type_t</li>
<li>objtype: don't expose mp_obj_instance_attr()</li>
<li>objtype: optimise instance get/set/del by skipping special accessors</li>
<li>gc: add gc_sweep_all() function to run all remaining finalisers</li>
<li>lexer: add support for underscores in numeric literals</li>
<li>modio: add uio.IOBase class to allow to define user streams</li>
<li>mkrules.mk: regenerate all qstrs when config files change</li>
<li>stream: introduce and use efficient mp_get_stream to access stream_p</li>
<li>objarray: replace 0x80 with new MP_OBJ_ARRAY_TYPECODE_FLAG_RW macro</li>
<li>add checks for stream objects in print() and sys.print_exception()</li>
<li>compile: combine break and continue compile functions</li>
<li>compile: combine subscript_2 and subscript_3 into one function</li>
<li>compile: combine global and nonlocal statement compile functions</li>
<li>compile: combine or_test and and_test compile functions</li>
<li>compile: combine expr, xor_expr and and_expr into one function</li>
<li>compile: handle return/break/continue correctly in async with</li>
<li>objgenerator: eliminate need for mp_obj_gen_wrap wrapper instances</li>
<li>obj.h: fix broken build for object repr C when float disabled</li>
<li>simplify some cases of accessing the map of module and type dict</li>
<li>objdict: make mp_obj_dict_get_map an inline function</li>
<li>objmodule: make mp_obj_module_get_globals an inline function</li>
<li>obj.h: give compile error if using obj repr D with single-prec float</li>
<li>malloc: give a compile warning if using finaliser without GC</li>
<li>objgenerator: implement <strong>name</strong> with normal fun attr accessor code</li>
<li>emitnative: optimise for iteration asm code for non-debug build</li>
<li>runtime: use mp_obj_new_int_from_ll when return int is not small</li>
<li>stream: introduce MP_STREAM_GET_FILENO ioctl request</li>
<li>objstr: in format error message, use common string with %s for type</li>
<li>asmthumb: optimise native code calling runtime glue functions</li>
<li>mpconfig.h: introduce MICROPY_DEBUG_PRINTER for debugging output</li>
<li>fix compiling with debug enabled and make more use of DEBUG_printf</li>
<li>emitnative: factor common code for native jump helper</li>
<li>emitnative: fix x86 native zero checks by comparing full word</li>
<li>asmx86: use generic emit function to simplify cmp emit function</li>
<li>emitnative: fix native locals stack to start at correct location</li>
<li>emitnative: simplify handling of exception objects from nlr_buf_t</li>
<li>emitnative: allocate space for local stack info as it's needed</li>
<li>compile: for dynamic compiler, widen literal 1 to get correct shift</li>
<li>py.mk: don't hardcode path to libaxtls.a</li>
<li>gc: in gc_alloc, reset n_free var right before search for free mem</li>
<li>objarray: allow to build again when bytearray is disabled</li>
<li>stream: adjust mp_stream_posix_XXX to take void*, not mp_obj_t</li>
<li>emitnative: use small tables to simplify handling of local regs</li>
<li>asmxtensa: handle function entry/exit when stack use larger than 127</li>
<li>asm*: support assembling code to jump to a register, and get PC+off</li>
<li>emitnative: optimise and improve exception handling in native code</li>
<li>asmxtensa: fix bug with order of regs in addi encoding</li>
<li>asmxtensa: optimise loading local addr and support larger offsets</li>
<li>emitnative: fix bug with store of 16 and 32 values in viper ARM mode</li>
<li>asmxtensa: use narrow version of add instr to reduce native code size</li>
<li>emitnx86: fix number of args passed to mp_setup_code_state, 4 not 5</li>
<li>vm: fix handling of finally-return with complex nested finallys</li>
<li>emitnative: cancel caught exception once handled to prevent reraise</li>
<li>emitnative: add support for return/break/continue in try and with</li>
<li>compile: factor code that compiles start/end of exception handler</li>
<li>py.mk: build axtls library directly from its source files</li>
<li>runtime: fix incorrect test for MICROPY_PORT_DEINIT_FUNC</li>
<li>objarray: bytearray: allow 2nd/3rd arg to constructor</li>
<li>emitnative: fix try-finally in outer scope, so finally is cancelled</li>
<li>fix native functions so they run with their correct globals context</li>
<li>optimise call to mp_arg_check_num by compressing fun signature</li>
<li>asmx64: fix bug in assembler when creating disp with r13 and 0 offset</li>
<li>{asmx86,asmx64}: extend test_r8_with_r8 to accept all 8 lower regs</li>
<li>emit: move MP_EMIT_OPT_xxx enums from compile.h to emitglue.h</li>
<li>emit: remove need to call set_native_type to set native/viper mode</li>
<li>emit: remove need to call set_native_type to set viper return type</li>
<li>emit: completely remove set_native_type, arg type is set in compiler</li>
<li>compile: merge viper annotation and normal param compilation stages</li>
<li>compile: factor code that compiles viper type annotations</li>
<li>emitnative: reuse mp_native_type_from_qstr when searching for a cast</li>
<li>make viper functions have the same entry signature as native</li>
<li>emitnative: support arbitrary number of arguments to viper functions</li>
<li>emitnative: use macros instead of raw offsetof for slot locations</li>
<li>emitnative: make viper funcs run with their correct globals context</li>
<li>asmxtensa: make indirect calls using func table, not raw pointers</li>
<li>asmthumb: detect presence of I-cache using CMSIS macro</li>
<li>objtype: clarify comment about configuring inplace op methods</li>
<li>shorten error messages by using contractions and some rewording</li>
<li>objstr: make % (<strong>mod</strong>) formatting operator configurable</li>
<li>modbuiltins: make oct/hex work when !MICROPY_PY_BUILTINS_STR_OP_MODULO</li>
<li>objgenerator: implement PEP479, StopIteration convs to RuntimeError</li>
<li>parsenum: avoid rounding errors with negative powers-of-10</li>
<li>modmath: add math.factorial, optimised and non-opt implementations</li>
<li>objstr: format: return bytes result for bytes format string</li>
<li>fix msvc C++ compiler warnings with MP_OBJ_FUN_MAKE_SIG macro</li>
<li>vm: make small optimisation of BUILD_SLICE opcode</li>
<li>objfloat: fix abs(-0.0) so it returns 0.0</li>
<li>emitnative: place const objs for native code in separate const table</li>
<li>asm*: remove ASM_MOV_REG_ALIGNED_IMM emit macro, it's no longer used</li>
<li>emitnative: change type of const_table from uintptr_t to mp_uint_t</li>
<li>vm: fix case of throwing GeneratorExit type into yield-from</li>
<li>runtime: remove nlr protection when calling <strong>next</strong> in mp_resume</li>
<li>objtype: support full object model for get/set/delitem special meths</li>
<li>vm: when VM raises exception put exc obj at beginning of func state</li>
<li>asmthumb: add wide ldr to handle larger offsets</li>
<li>asmthumb: clean up asm_thumb_bl_ind to use new optimised ldr helper</li>
<li>asmthumb: extend asm entry/exit to handle stack larger than 508 bytes</li>
<li>asmx86: comment out unused asm_x86_nop to prevent compiler warnings</li>
<li>asmx64: extend asm_x64_mov_reg_pcrel to accept high registers</li>
<li>asmxtensa: use proper calculation for const table offset</li>
<li>emitnative: reorder native state on C stack so nlr_buf_t is first</li>
<li>emitnative: implement yield and yield-from in native emitter</li>
<li>runtime: use mp_import_name to implement tail of mp_import_from</li>
<li>runtime: remove comment in mp_import_name about level being 0</li>
<li>obj.h: use uint64_t instead of mp_int_t in repr-D MP_OBJ_IS_x macros</li>
<li>emitnative: clean up unused macro and forward function declarations</li>
<li>asmx64: change stack management to reference locals by rsp not rbp</li>
<li>asmx64: change indirect calls to load fun ptr from the native table</li>
<li>asmx86: change stack management to reference locals by esp not ebp</li>
<li>asmx86: change indirect calls to load fun ptr from the native table</li>
<li>emitnative: load native fun table ptr from const table for all archs</li>
<li>asmarm: simplify asm_arm_bl_ind to only load via index, not literal</li>
<li>asmthumb: remove unused fun_ptr arg from asm_thumb_bl_ind function</li>
<li>emitnative: remove unused ptr argument from ASM_CALL_IND macro</li>
<li>emitnative: consolidate use of stacked immediate values to one func</li>
<li>emitnative: simplify viper mode handling in emit_native_import_name</li>
<li>emitnative: push internal None rather than const obj where possible</li>
<li>emitnative: put None/False/True in global native const table</li>
<li>objtype: remove comment about catching exc from user <strong>getattr</strong></li>
<li>objstr: make str.count() method configurable</li>
<li>objmodule: implement PEP 562's <strong>getattr</strong> for modules</li>
<li>py.mk: when building axtls use -Wno-all to prevent all warnings</li>
<li>compile: fix case of eager implicit conversion of local to nonlocal</li>
<li>compile: remove unneeded variable from global/nonlocal stmt helpers</li>
<li>scope: optimise scope_find_or_add_id to not need "added" arg</li>
<li>runtime: fix qstr assumptions when handling "import *"</li>
<li>unicode: fix check for valid utf8 being stricter about contn chars</li>
<li>py.mk: fix broken Gmane URL</li>
<li>add option to reduce GC stack integer size to save RAM</li>
<li>objboundmeth: support loading generic attrs from the method</li>
<li>obj: add support for <strong>int</strong> special method</li>
<li>objexcept: use macros to make offsets in emergency exc buf clearer</li>
<li>objexcept: make sure mp_obj_new_exception_msg doesn't copy/format msg</li>
<li>objdict: make .fromkeys() method configurable</li>
<li>bc: fix calculation of opcode size for opcodes with map caching</li>
<li>qstr: put a lower bound on new qstr pool allocation</li>
<li>objarray: introduce "memview_offset" alias for "free" field of object</li>
<li>gc: adjust gc_alloc() signature to be able to accept multiple flags</li>
<li>mpconfig: move MICROPY_VERSION macros to static ones in mpconfig.h</li>
<li>runtime: unlock the GIL in mp_deinit function</li>
<li>get optional VM stack overflow check compiling and working again</li>
<li>fix location of VM returned exception in invalid opcode and comments</li>
<li>modio: make iobase_singleton object const so it goes in ROM</li>
<li>obj.h: explicitly cast args to uint32_t in MP_OBJ_FUN_MAKE_SIG</li>
</ul>
<p>extmod:</p>
<ul>
<li>modlwip: update to work with lwIP v2.0</li>
<li>modlwip: set POLLHUP flag for sockets that are new</li>
<li>modlwip: allow to compile with MICROPY_PY_LWIP disabled</li>
<li>modussl_mbedtls: populate sock member right away in wrap_socket</li>
<li>modussl_mbedtls: use mbedtls_entropy_func for CTR-DRBG entropy</li>
<li>vfs: use u_rom_obj properly in argument structures</li>
<li>vfs_fat: rename FileIO/TextIO types to mp_type_vfs_fat_XXX</li>
<li>add VfsPosix filesystem component</li>
<li>vfs: add fast path for stating VfsPosix filesystem</li>
<li>vfs: introduce a C-level VFS protocol, with fast import_stat</li>
<li>moduhashlib: prefix all Python methods and objects with uhashlib</li>
<li>moduhashlib: reorder funcs so that they are grouped by hash type</li>
<li>moduhashlib: allow to disable the sha256 class</li>
<li>moduhashlib: allow using the sha256 implementation of mbedTLS</li>
<li>moduhashlib: make function objects STATIC</li>
<li>uos_dupterm: use native C stream methods on dupterm object</li>
<li>modussl_axtls: fix <strong>del</strong> to point to mp_stream_close_obj</li>
<li>vfs_fat_diskio: factor disk ioctl code to reduce code size</li>
<li>update to use new mp_get_stream helper</li>
<li>moducryptolib: add ucryptolib module with crypto functions</li>
<li>moducryptolib: optionally export MODE_* constants to Python</li>
<li>moducryptolib: refactor functions for clean interface with axTLS</li>
<li>moducryptolib: add an mbedTLS implementation for this module</li>
<li>moducryptolib: prefix all Python methods/objects with ucryptolib</li>
<li>moducryptolib: shorten exception messages to reduce code size</li>
<li>moducryptolib: don't include arpa/inet.h, it's not needed</li>
<li>modure: add match.groups() method, and tests</li>
<li>modure: add match.span(), start() and end() methods, and tests</li>
<li>modure: add ure.sub() function and method, and tests</li>
<li>vfs: support opening a file descriptor (int) with VfsPosix</li>
<li>fix to support compiling with object representation D</li>
<li>vfs_posix: support ilistdir with no (or empty) argument</li>
<li>vfs_posix: use DTTOIF if available to convert type in ilistdir</li>
<li>modlwip: deregister all lwIP callbacks when closing a socket</li>
<li>modussl: support polling in ussl objects by passing through ioctl</li>
<li>modbtree: update to work with new mp_stream_posix_XXX signatures</li>
<li>modussl_axtls: use MP_ROM_PTR for objects in allowed args array</li>
<li>moduhashlib: add md5 implementation, using axTLS</li>
<li>moduhashlib: use newer message digest API for mbedtls >=2.7.0</li>
<li>moduhashlib: add md5 implementation using mbedtls</li>
<li>moductypes: remove BITFIELD from aggregate types enum</li>
<li>moductypes: accept OrderedDict as a structure description</li>
<li>modonewire: fix reset timings to match 1-wire specs</li>
<li>moductypes: make sizeof() accept "layout" parameter</li>
<li>modlwip: implement TCP listen/accept backlog</li>
<li>modlwip: fix read-polling of listening socket with a backlog</li>
<li>moductypes: implement <strong>int</strong> for PTR</li>
<li>moductypes: add aliases for native C types</li>
</ul>
<p>lib:</p>
<ul>
<li>lwip: update lwIP to v2.0.3, tag STABLE-2_0_3_RELEASE</li>
<li>stm32lib: update library to include support for STM32F0 MCUs</li>
<li>utils/printf: make DEBUG_printf implementation more accessible</li>
<li>utils: fix to support compiling with object representation D</li>
<li>utils: expose pyb_set_repl_info function public</li>
<li>libm_dbl/tanh: make tanh more efficient and handle large numbers</li>
<li>libm/math: make tanhf more efficient and handle large numbers</li>
<li>libm/wf_tgamma: fix tgammaf handling of -inf, should return nan</li>
<li>libm_dbl: add implementation of copysign() for DEBUG builds</li>
<li>stm32lib: update library to fix issue with filling USB TX FIFO</li>
<li>libm/math: fix int type in float union, uint64_t should be uint32_t</li>
<li>libm/math: add implementation of __signbitf, if needed by a port</li>
<li>utils/pyexec: forcefully unlock the heap if locked and REPL active</li>
<li>utils: add generic MicroPython IRQ helper functions</li>
<li>stm32lib: update library to get F413 BOR defs and fix gcc 8 warning</li>
</ul>
<p>drivers:</p>
<ul>
<li>wiznet5k: fix bug with MACRAW socket calculating packet size</li>
<li>memory/spiflash: move cache buffer to user-provided config</li>
<li>memory/spiflash: rename functions to indicate they use cache</li>
<li>memory/spiflash: add functions for direct erase/read/write</li>
<li>sdcard: change driver to use new block-device protocol</li>
<li>sdcard: fix bug in computing number of sectors on SD Card</li>
<li>sdcard: do not release CS during the middle of read operations</li>
<li>cc3000: use cc3000_time_t instead of time_t for custom typedef</li>
<li>display/lcd160cr.py: in fast_spi, send command before flushing</li>
<li>sdcard: in test use os.umount and machine module instead of pyb</li>
<li>sdcard: remove debugging print statement in ioctl method</li>
<li>dht: allow open-drain-high call to be DHT specific if needed</li>
</ul>
<p>tools:</p>
<ul>
<li>pydfu.py: increase download packet size to full 2048 bytes</li>
<li>pydfu.py: add support for multiple memory segments</li>
<li>pydfu.py: use getfullargspec instead of getargspec for newer pyusb</li>
<li>pydfu.py: workaround stdio flush error on Windows with Python 3.6</li>
<li>pydfu.py: improve DFU reset, and auto-detect USB transfer size</li>
<li>mpy-tool.py: support freezing of floats in obj representation D</li>
<li>mpy-tool.py: put frozen bignum digit data in ROM, not in RAM</li>
<li>mpy-tool.py: set sane initial dynamic qstr pool size with frozen mods</li>
<li>mpy-tool.py: fix calc of opcode size for opcodes with map caching</li>
<li>mpy-tool.py: fix build error when no qstrs present in frozen mpy</li>
<li>dfu.py: pad image data to 8 byte alignment to support L476</li>
<li>pyboard.py: run exec: command as a string</li>
<li>pyboard.py: change base class of PyboardError to Exception</li>
<li>pyboard.py: in TelnetToSerial.close replace try/except with if</li>
</ul>
<p>tests:</p>
<ul>
<li>basics/special_methods2: enable some additional tests that work</li>
<li>add some tests for bigint hash, float hash and float parsing</li>
<li>extmod: add test for importing a script from a user VFS</li>
<li>extmod: remove conditional import of uos_vfs, it no longer exists</li>
<li>pyb: make i2c and pyb1 pyboard tests run again</li>
<li>io: add simple IOBase test</li>
<li>extmod: add test for VFS and user-defined filesystem and files</li>
<li>unix/extra_coverage: don't test stream objs with NULL write fun</li>
<li>extmod/ujson_dump.py: add test for dump to non-stream object</li>
<li>extmod: add test for ujson.dump writing to a user IOBase object</li>
<li>import: add test for importing invalid .mpy file</li>
<li>add tests using "file" argument in print and sys.print_exception</li>
<li>extmod/ucryptolib*: add tests for ucryptolib module</li>
<li>extmod/ucryptolib*: add into and inplace tests for ucryptolib</li>
<li>basics/namedtuple*: import ucollections first</li>
<li>move non-filesystem io tests to basics dir with io_ prefix</li>
<li>improve feature detection for VFS</li>
<li>run-tests: add nrf target</li>
<li>run-tests: improve crash reporting when running on remote targets</li>
<li>extmod/ujson_dump_iobase.py: return number of bytes written</li>
<li>make tests work on targets without float support</li>
<li>micropython/viper_cond: add test for large int as bool</li>
<li>run-tests: enable bool1.py test with native emitter</li>
<li>micropython: add tests for try and with blocks under native/viper</li>
<li>basics/set_pop.py: sort set before printing for consistent output</li>
<li>basics/int_big_error.py: use bytearray to test for int overflow</li>
<li>modify tests that print repr of an exception with 1 arg</li>
<li>basics: provide .exp files for generator tests that fail PEP479</li>
<li>run-tests: enable native tests for unwinding jumps</li>
<li>basics: add more tests for return within try-finally</li>
<li>basics: add test cases for context manager raising in enter/exit</li>
<li>float/cmath_fun.py: fix truncation of small real part of complex</li>
<li>float: test -inf and some larger values for special math funcs</li>
<li>remove pyboard.py symlink and instead import from ../tools</li>
<li>extmod/uhashlib_md5: add coverage tests for MD5 algorithm</li>
<li>float/float_parse.py: add tests for accuracy of small decimals</li>
<li>cpydiff: add case for difference in behaviour of bytes.format()</li>
<li>micropython: test loading const objs in native and viper funcs</li>
<li>basics: split out gen throw tests from yield-from-throw tests</li>
<li>run-tests: enabled native tests that pass now that yield works</li>
<li>unix/ffi_float: skip if strtof() is not available</li>
<li>uselect_poll_basic: add basic test for uselect.poll invariants</li>
<li>uctypes_sizeof_od: test for using OrderedDict as struct descriptor</li>
<li>basics/class_getattr: remove invalid test for <strong>getattribute</strong></li>
<li>make bytes/str.count() tests skippable</li>
<li>extmod/uctypes_sizeof_layout: test for sizeof of different layout</li>
<li>import: add .exp file for module_getattr.py to not require Py 3.7</li>
<li>cmdline/cmd_showbc.py: fix test to explicitly declare nonlocal</li>
<li>extmod: skip uselect test when CPython doesn't have poll()</li>
<li>import_long_dyn: test for "import *" of a long dynamic name</li>
<li>io: update tests to use uos.remove() instead of uos.unlink()</li>
<li>basics/special_methods: add testcases for <strong>int</strong></li>
<li>extmod/uctypes_ptr_le: test int() operation on a pointer field</li>
<li>extmod/uctypes_error: add test for unsupported unary op</li>
<li>run-tests: make .exp and .out file names unique by prefixing with dir</li>
</ul>
<p>mpy-cross:</p>
<ul>
<li>make build independent of extmod directory</li>
<li>Makefile: also undefine MICROPY_FORCE_32BIT and CROSS_COMPILE</li>
</ul>
<p>minimal port:</p>
<ul>
<li>main: allow to compile without GC enabled</li>
</ul>
<p>unix port:</p>
<ul>
<li>support MICROPY_VFS_POSIX and enable it in coverage build</li>
<li>moduos_vfs: add missing uos functions from traditional uos module</li>
<li>mpconfigport.h: enable MICROPY_PY_UCRYPTOLIB</li>
<li>mpconfigport_coverage: enable ure groups, span, start, end and sub</li>
<li>modos: convert dir-type to stat-type for file type in ilistdir</li>
<li>use MP_STREAM_GET_FILENO to allow uselect to poll general objects</li>
<li>Makefile: coverage: Explicitly build "axtls" too</li>
<li>Makefile: enable ussl module with nanbox build</li>
<li>Makefile: remove building of libaxtls.a which is no longer needed</li>
<li>Makefile: build libffi inside $BUILD</li>
<li>mpconfigport_coverage.h: enable uhashlib.md5</li>
<li>modos: include extmod/vfs.h for MP_S_IFDIR, etc</li>
<li>modjni: update .getiter signature to include mp_obj_iter_buf_t*</li>
<li>modjni: get building under coverage and nanbox builds</li>
<li>mpconfigport.h: enable MICROPY_PY_UHASHLIB_MD5 for uhashlib.md5</li>
<li>moduselect: raise OSError(ENOENT) if obj to modify is not in poller</li>
<li>modusocket: initial implementation of socket.settimeout()</li>
<li>modusocket: finish socket.settimeout() implementation</li>
<li>modffi: add support for "q"/"Q" specs (int64_t/uint64_t)</li>
<li>Makefile: allow to override/omit pthread lib name</li>
<li>modos: rename unlink to remove to be consistent with other ports</li>
<li>enable MICROPY_PY_BUILTINS_ROUND_INT</li>
<li>enable uio.IOBase</li>
<li>call gc_sweep_all() when doing a soft reset</li>
</ul>
<p>windows port:</p>
<ul>
<li>make printing of debugging info work out of the box</li>
<li>msvc: support custom compiler for header generation</li>
<li>msvc: implement file/directory type query</li>
<li>remove remaining traces of old GNU readline support</li>
</ul>
<p>stm32 port:</p>
<ul>
<li>usbd_conf.h: remove unused macros and clean up header file</li>
<li>usbd_conf: changes files to unix line endings and apply styling</li>
<li>usbdev: convert files to unix line endings</li>
<li>usbdev: remove unused RxState variable, and unused struct</li>
<li>usbdev: be honest about data not being written to HID endpoint</li>
<li>usbd_hid_interface: address possible race condition vs. interrupt</li>
<li>i2c: add new hardware I2C driver for F4 MCUs</li>
<li>machine_i2c: use new F4 hardware I2C driver for machine.I2C class</li>
<li>accel: switch pyb.Accel to use new C-level I2C API</li>
<li>modpyb: introduce MICROPY_PY_PYB_LEGACY config option for pyb mod</li>
<li>pyb_i2c: put pyb.I2C under MICROPY_PY_PYB_LEGACY setting</li>
<li>modpyb: remove unused includes and clean up comments</li>
<li>usb: use usbd_cdc_itf_t pointer directly in USB_VCP class</li>
<li>usb: combine CDC lower-layer and interface state into one struct</li>
<li>usb: combine HID lower-layer and interface state into one struct</li>
<li>usb: make CDC endpoint definitions private to core usbdev driver</li>
<li>usb: change CDC tx/rx funcs to take CDC state, not usbdev state</li>
<li>usb: change HID report funcs to take HID state, not usbdev state</li>
<li>usb: add ability to have 2x VCP interfaces on the one USB device</li>
<li>usb: initialise cdc variable to prevent compiler warnings</li>
<li>enable UART7/8 on F4 series that have these peripherals</li>
<li>add support for STM32L496 MCU</li>
<li>boards: add board ld and af.csv files for STM32L496 MCU</li>
<li>boards: add config files for new board, STM32L496GDISC</li>
<li>rtc: don't try to set SubSeconds value on RTC</li>
<li>integrate lwIP as implementation of usocket module</li>
<li>rng: use Yasmarang for rng_get() if MCU doesn't have HW RNG</li>
<li>remove unneeded HTML release notes from usbdev and usbhost dirs</li>
<li>add low-level hardware I2C slave driver</li>
<li>add new component, the mboot bootloader</li>
<li>allow to have no storage support if there are no block devices</li>
<li>add support for Cortex-M0 CPUs</li>
<li>timer: make timer_get_source_freq more efficient by using regs</li>
<li>allow a board to disable MICROPY_VFS_FAT</li>
<li>boards: add startup_stm32f0.s for STM32F0 MCUs</li>
<li>add support for STM32F0 MCUs</li>
<li>boards: add alt-func CSV list and linker script for STM32F091</li>
<li>boards: add NUCLEO_F091RC board configuration files</li>
<li>README: update to include STM32F0 in list of supported MCUs</li>
<li>boards: split combined alt-func labels and fix some other errors</li>
<li>boards: ensure USB OTG power is off for NUCLEO_F767ZI</li>
<li>flash: increase H7 flash size to full 2MiB</li>
<li>modnetwork: don't take netif's down when network is deinited</li>
<li>modnetwork: change base entry of NIC object from type to base</li>
<li>modnetwork: provide generic implementation of ifconfig method</li>
<li>add network driver for Wiznet5k using MACRAW mode and lwIP</li>
<li>modnetwork: fix arg indexing in generic ifconfig method</li>
<li>mpconfigport.h: enable DELATTR_SETATTR and BUILTINS_NOTIMPLEMENTED</li>
<li>mboot: increase USB rx_buf and DFU buf sizes to full 2048 bytes</li>
<li>Makefile: rebuild all qstrs when any board configuration changes</li>
<li>boards/STM32L476DISC: update SPI flash config for cache change</li>
<li>timer: support TIM1 on F0 MCUs</li>
<li>i2c: fix num_acks calculation in i2c_write for F0 and F7 MCU's</li>
<li>i2cslave: fix ordering of event callbacks in slave IRQ handler</li>
<li>mboot: adjust user-reset-mode timeout so it ends with mode=1</li>
<li>boards/stm32f091_af.csv: split labels that are multiple funcs</li>
<li>boards/NUCLEO_F091RC: add Arduino-named pins and rename CPU pins</li>
<li>can: use MP_OBJ_ARRAY_TYPECODE_FLAG_RW where appropriate</li>
<li>spi: fix SPI driver so it can send/recv more than 65535 bytes</li>
<li>mboot: define constants for reset mode cycling and timeout</li>
<li>boards/NUCLEO_F091RC: fix TICK_INT_PRIORITY so it is highest prio</li>
<li>qspi: don't require data reads and writes to be a multiple of 4</li>
<li>mboot: add support for erase/read/write of external SPI flash</li>
<li>boards: add .ld and af.csv files for STM32F722</li>
<li>modnetwork: fix query of DNS IP address in ifconfig()</li>
<li>mboot: fix bug with invalid memory access of USB state</li>
<li>mboot: only compile in code for the USB periph that is being used</li>
<li>mboot: always use a flash latency of 1WS to match 48MHz HCLK</li>
<li>access dict map directly instead of using helper function</li>
<li>support compiling with object representation D</li>
<li>fatfs_port: fix bug when MICROPY_HW_ENABLE_RTC not enabled</li>
<li>timer: use enum for indexing keyword arg in pyb_timer_init_helper</li>
<li>timer: add tick_hz arg to Timer constructor and init method</li>
<li>mphalport: make mp_hal_stdin_rx_chr/stdout_tx_strn weakly linked</li>
<li>flashbdev: fix bug with L4 block cache, dereferencing block size</li>
<li>add method for statically configuring pin alternate function</li>
<li>sdcard: use mp_hal_pin_config_alt_static to configure SD card pins</li>
<li>sdram: add SDRAM driver from OpenMV project</li>
<li>sdram: integrate SDRAM driver into rest of code</li>
<li>sdram: on F7 MCUs enable MPU on external SDRAM</li>
<li>boards/STM32F429DISC: enable onboard SDRAM</li>
<li>sdcard: get SDMMC alt func macro names working with F4,F7,H7 MCUs</li>
<li>Makefile: use -Wno-attributes for ll_usb.c HAL source file</li>
<li>rtc: get rtc.wakeup working on F0 MCUs</li>
<li>modmachine: get machine.sleep working on F0 MCUs</li>
<li>extint.h: use correct EXTI lines for RTC interrupts</li>
<li>modmachine: get machine.sleep working on L4 MCUs</li>
<li>adc: disable VBAT in read channel helper function</li>
<li>adc: fix ADC reading on F0 MCUs to only sample a single channel</li>
<li>spi: round up prescaler calc to never exceed requested baudrate</li>
<li>sdram: allow additional config by a board, and tune MPU settings</li>
<li>boards/STM32F429DISC: add burst len and autorefresh to SDRAM cfg</li>
<li>boards/STM32F7DISC: enable onboard SDRAM</li>
<li>spi: split out pyb.SPI and machine.SPI bindings to their own files</li>
<li>spi: add implementation of low-level SPI protocol</li>
<li>mboot/main: use correct formula for DFU download address</li>
<li>Makefile: allow external BOARD_DIR directory to be specified</li>
<li>boards/STM32L476DISC: enable external RTC xtal to get RTC working</li>
<li>for MCUs that have PLLSAI allow to set SYSCLK at 2MHz increments</li>
<li>dma: pass DMA direction as parameter to dma_init not in cfg struct</li>
<li>dma: reinitialise the DMA if the direction changed on the channel</li>
<li>sdcard: use only a single DMA stream for both SDIO TX/RX</li>
<li>sdcard: move temporary DMA state from BSS to stack</li>
<li>spi: be sure to set all SPI config values in SPI proto init</li>
<li>change flash IRQ priority from 2 to 6 to prevent preemption</li>
<li>flashbdev: protect flash writes from cache flushing and USB MSC</li>
<li>sdcard: fully reset SDMMC periph before calling HAL DMA functions</li>
<li>dma: get DMA working on F0 MCUs</li>
<li>sdram: add support for 32-bit wide data bus and 256MB in MPU cfg</li>
<li>boards/STM32F769DISC: add optional support for external SDRAM</li>
<li>add support for STM32F765xx MCUs</li>
<li>Makefile: include copysign.c in double precision float builds</li>
<li>adc: fix ADC calibration scale for L4 MCUs, they use 3.0V</li>
<li>adc: increase sample time for internal sensors on L4 MCUs</li>
<li>dcmi: add F4/F7/H7 hal files and dma definitions for DCMI periph</li>
<li>uart: add support for USART3-8 on F0 MCUs</li>
<li>boards/NUCLEO_F091RC: enable USART3-8 with default pins</li>
<li>modmachine: re-enable PLLSAI[1] after waking from stop mode</li>
<li>powerctrl: move function to set SYSCLK into new powerctrl file</li>
<li>powerctrl: fix configuring APB1/APB2 frequency when AHB also set</li>
<li>powerctrl: factor code to set RCC PLL and use it in startup</li>
<li>powerctrl: factor code that configures PLLSAI on F7 MCUs</li>
<li>powerctrl: optimise passing of default values to set_sysclk</li>
<li>powerctrl: don't configure clocks if already at desired frequency</li>
<li>usbd_conf: allocate enough space in USB HS TX FIFO for CDC packet</li>
<li>mpconfigport.h: enable math.factorial, optimised version</li>
<li>main: add configuration macros for board to set heap start/end</li>
<li>usbd_cdc_interface: handle disconnect IRQ to set VCP disconnected</li>
<li>usbd_cdc_interface: refactor USB CDC tx code to not use SOF IRQ</li>
<li>spi: fix calculation of SPI clock source on H7 MCUs</li>
<li>boards/stm32h743.ld: fix total flash size, should be 2048k</li>
<li>system_stm32: introduce configuration defines for PLL3 settings</li>
<li>adc: add ADC auto-calibration for L4 MCUs</li>
<li>flashbdev: add missing include for irq.h</li>
<li>servo: only initialise TIM5 if it is needed, to save power</li>
<li>usb: fully deinitialise USB periph when it is deactivated</li>
<li>powerctrl: move (deep)sleep funcs from modmachine.c to powerctrl.c</li>
<li>powerctrl: disable IRQs during stop mode to allow reconfig on wake</li>
<li>boards/STM32F429DISC: enable UART as secondary REPL</li>
<li>uart: always show the flow setting when printing a UART object</li>
<li>mboot: provide led_state_all function to reduce code size</li>
<li>mboot: add support for 4th board LED</li>
<li>boards: add configuration for putting mboot on PYBv1.x</li>
<li>mboot: add documentation for using mboot on PYBv1.x</li>
<li>powerctrl: add support for standby mode on L4 MCUs</li>
<li>uart: add rxbuf keyword arg to UART constructor and init method</li>
<li>boards: add STM32L432KC chip configuration files</li>
<li>add peripheral support for STM32L432</li>
<li>boards: add NUCLEO_L432KC board configuration files</li>
<li>split out UART Python bindings from uart.c to machine_uart.c</li>
<li>uart: factor out code from machine_uart.c that computes baudrate</li>
<li>uart: rework uart_get_baudrate so it doesn't need a UART handle</li>
<li>uart: factor out code to set RX buffer to function uart_set_rxbuf</li>
<li>uart: remove HAL's UART_HandleTypeDef from UART object struct</li>
<li>uart: simplify deinit of UART, no need to call HAL</li>
<li>uart: for UART init, pass in params directly, not via HAL struct</li>
<li>uart: move config of char_width/char_mask to uart.c</li>
<li>uart: add ability to have a static built-in UART object</li>
<li>extint: use correct EXTI channels on H7 MCUs for RTC events</li>
<li>adc: fix calibrated volt/temp readings on H7 by using 16bit scale</li>
<li>adc: increase ADC sampling time for internal sources on H7 MCUs</li>
<li>adc: support 16-bit ADC configuration on H7 MCUs</li>
<li>boards: allow OpenOCD stm_flash procedure to accept single FW img</li>
<li>boards/NUCLEO_L432KC: specify L4 OpenOCD config file for this MCU</li>
<li>main: add board config option to enable/disable mounting SD card</li>
<li>implement UART.irq() method with initial support for RX idle IRQ</li>
<li>uart: fix uart_rx_any in case of no buffer to return 0 or 1</li>
<li>uart: always enable global UART IRQ handler on init</li>
<li>uart: clear overrun error flag after reading RX data register</li>
<li>uart: make sure user IRQs are handled even with a keyboard intr</li>
<li>modmachine: fix reset_cause to correctly give DEEPSLEEP on L4 MCU</li>
<li>sdcard: properly reset SD periph when SDMMC2 is used on H7 MCUs</li>
<li>wdt: make singleton WDT object const so it goes in ROM</li>
<li>main: make thread and FS state static and exclude when not needed</li>
<li>use MICROPY_GC_STACK_ENTRY_TYPE to save some RAM</li>
<li>.gitattributes: remove special text handling of stm32 usbdev files</li>
<li>enable MICROPY_PY_BUILTINS_ROUND_INT</li>
<li>enable descriptors</li>
<li>enable uio.IOBase</li>
<li>enable ure.sub()</li>
<li>call gc_sweep_all() when doing a soft reset</li>
</ul>
<p>cc3200 port:</p>
<ul>
<li>mods: include stream.h to get definition of mp_stream_p_t</li>
<li>mods: access dict map directly instead of using helper func</li>
<li>use MICROPY_GC_STACK_ENTRY_TYPE to save some RAM</li>
</ul>
<p>esp8266 port:</p>
<ul>
<li>mpconfigport.h: add some weak links to common Python modules</li>
<li>modnetwork: return empty str for hostname if STA is inactive</li>
<li>modnetwork: raise ValueError when getting invalid WLAN id</li>
<li>modmachine: allow I2C and SPI to be configured out of the build</li>
<li>change UART(0) to attach to REPL via uos.dupterm interface</li>
<li>modules/ntptime.py: remove print of newly-set time</li>
<li>mpconfigport.h: enable ucryptolib module for standard build</li>
<li>esp8266_common.ld: put mp_keyboard_interrupt in iRAM</li>
<li>modesp: run ets_loop_iter before/after doing flash erase/write</li>
<li>let machine.WDT trigger the software WDT if obj is not fed</li>
<li>Makefile: remove build of libaxtls.a and add back tuned config</li>
<li>main: increase heap by 2kb, now that axtls rodata is in ROM</li>
<li>remove scanning of GC pointers in native code block</li>
<li>ets_alt_task: process idle callback if no other events occurred</li>
<li>modnetwork: automatically do radio sleep if no interface active</li>
<li>modnetwork: wait for iface to go down before forcing power mgmt</li>
<li>machine_uart: add rxbuf keyword arg to UART constructor/init</li>
<li>main: activate UART(0) on dupterm for REPL before boot.py runs</li>
<li>esp_mphal: provide mp_hal_pin_od_high_dht so DHT works reliably</li>
<li>implement high-res timers using new tick_hz argument</li>
<li>use MICROPY_GC_STACK_ENTRY_TYPE to save some RAM</li>
<li>enable MICROPY_PY_BUILTINS_ROUND_INT</li>
<li>enable descriptors</li>
<li>enable uio.IOBase</li>
<li>enable ure.sub()</li>
<li>call gc_sweep_all() when doing a soft reset, cleans up sockets</li>
</ul>
<p>esp32 port:</p>
<ul>
<li>update to latest ESP IDF version</li>
<li>modnetwork: fix STA/AP activate/deactivate for new IDF API</li>
<li>Makefile: update to latest ESP IDF version</li>
<li>esp32.custom_common.ld: put soc code in iram0</li>
<li>silence ESP-IDF log messages when in raw REPL mode</li>
<li>Makefile: extract common C & C++ flags for consistent compilation</li>
<li>add support for building with external SPI RAM</li>
<li>modnetwork: fix isconnected() when using static IP config</li>
<li>remove port-specific uhashlib implementation and use common one</li>
<li>fatfs_port: implement get_fattime so FAT files have a timestamp</li>
<li>update to latest ESP IDF</li>
<li>modules: include umqtt library in frozen modules</li>
<li>mpconfigport.h: enable ucryptolib module</li>
<li>allow to build with uPy floats disabled</li>
<li>reduce latency for handling of scheduled Python callbacks</li>
<li>modnetwork: add support for bssid parameter in WLAN.connect()</li>
<li>implement WLAN.status() return codes</li>
<li>modesp32: add raw temperature reading to esp32 module</li>
<li>modesp32: use MP_ROM_QSTR and MP_ROM_PTR in const locals dict</li>
<li>modnetwork: add network.(W)LAN.ifconfig('dhcp') support</li>
<li>update to latest ESP IDF</li>
<li>fix int overflow in machine.sleep/deepsleep functions</li>
<li>machine_rtc: fix locals dict entry, init qstr points to init meth</li>
<li>modesp32: add hall_sensor() function</li>
<li>network_ppp: add PPPoS functionality</li>
<li>mpthreadport: prevent deadlocks when deleting all threads</li>
<li>allocate task TCB and stack from system heap not uPy heap</li>
<li>machine_uart: add txbuf/rxbuf keyword args to UART construct/init</li>
<li>machine_uart: implement UART.sendbreak() method</li>
<li>machine_pwm: support higher PWM freq by auto-scaling timer res</li>
<li>machine_pwm: on deinit stop routing PWM signal to the pin</li>
<li>modmachine: enable machine.sleep() now that the IDF supports it</li>
<li>mphalport: when tx'ing to REPL only release GIL if many chars sent</li>
<li>modsocket: for socket read only release GIL if socket would block</li>
<li>machine_pin: add Pin.off() and Pin.on() methods</li>
<li>Makefile: use system provided math library rather than uPy one</li>
<li>modules/neopixel.py: change NeoPixel to different default timings</li>
<li>machine_hw_spi: use separate DMA channels for HSPI and VSPI</li>
<li>machine_hw_spi: make HW SPI objects statically allocated</li>
<li>implement high-res timers using new tick_hz argument</li>
<li>enable MICROPY_PY_BUILTINS_ROUND_INT</li>
<li>enable descriptors</li>
<li>enable uio.IOBase</li>
<li>enable ure.sub()</li>
<li>call gc_sweep_all() when doing a soft reset</li>
</ul>
<p>nrf port:</p>
<ul>
<li>add new port to Nordic nRF5x MCUs</li>
<li>align help.c builtin help text to use correct type</li>
<li>add WT51822-S4AT board</li>
<li>use --gc-sections to reduce code size</li>
<li>add compile switch to disable VFS</li>
<li>enable Link-time optimizations (LTO)</li>
<li>boards/arduino_primo: add missing hal_rng config used by random mod</li>
<li>implement NVMC HAL</li>
<li>disable FAT/VFS by default</li>
<li>hal/nvmc: remove pre-compiler error thrown in nvmc.h, if on nrf52</li>
<li>hal/hal_nvmc: fix non-SD code</li>
<li>boards: update linker scripts</li>
<li>add micro:bit filesystem</li>
<li>drivers/bluetooth/ble_drv: don't handle non-events</li>
<li>modules/uos/microbitfs: make OSError numeric</li>
<li>main: run boot.py and main.py on startup</li>
<li>use micropython libm to save flash</li>
<li>main: add ampy support</li>
<li>drivers/bluetooth: start advertising after disconnect</li>
<li>update usage of mp_obj_new_str by removing last parameter</li>
<li>remove default FROZEN_MPY_DIR</li>
<li>option to enable Ctrl-C in NUS console</li>
<li>boards/microbit: add copy of microbit display and image files</li>
<li>boards/microbit: add copy of microbit font type from microbit-dal</li>
<li>boards/microbit: rename display/image files from .cpp to .c ext</li>
<li>boards/microbit: update board modules from C++ to C-code</li>
<li>boards/microbit: add framework updates to build micro:bit modules</li>
<li>boards/microbit: attempt to get working display/images without FP</li>
<li>boards/microbit: add modmicrobit.h to expose module init function</li>
<li>boards/microbit: include modmicrobit.h in board_modules.h</li>
<li>drivers/softpwm: rename init function to softpwm_init0</li>
<li>drivers/ticker: rework ticker functions for microbit display/music</li>
<li>boards/microbit: update to work with new ticker code</li>
<li>modules/music: remove init of softpwm/ticker upon music module load</li>
<li>update main.c to init relevant board drivers, if enabled</li>
<li>boards/microbit: move microbit target to custom linker script</li>
<li>boards/microbit/modules: fix tabbing in modmicrobit.c</li>
<li>boards/microbit: add temperature back to microbit module</li>
<li>boards/microbit: update docs on top level tick low pri callback</li>
<li>change board module header from board_modules.h to boardmodules.h</li>
<li>add if-def around inclusion of nrf_sdm.h in main</li>
<li>boards/microbit: enable music, display, image, microbit module</li>
<li>drivers/bluetooth: reset evt_len to size of static buffer each iter</li>
<li>add support for s132 v5.0.0 bluetooth stack (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="25435189" data-permission-text="Title is private" data-url="https://github.com/micropython/micropython/issues/139" data-hovercard-type="pull_request" data-hovercard-url="/micropython/micropython/pull/139/hovercard" href="https://github.com/micropython/micropython/pull/139">micropython#139</a>)</li>
<li>change PYB prefix to MPY</li>
<li>only search for frozen files if FROZEN_MPY_DIR is set</li>
<li>mpconfigport: reduce GC stack size for nrf51</li>
<li>modules/machine/pin: disable pin debug by default</li>
<li>boards/common.ld: avoid overflowing the .text region</li>
<li>drivers/ble_drv: fixing sd_ble_enable bug for SD s132 v.2.0.1</li>
<li>make machine.UART optional</li>
<li>fix stack size in ld script and enable MICROPY_STACK_CHECK</li>
<li>improve include of boardmodules.mk</li>
<li>make LTO configurable via Makefile flag</li>
<li>boards/microbit/modules: initialize variable in microbit_sleep</li>
<li>replace custom-HAL with nrfx-HAL</li>
<li>fix NUS console when using boot.py or main.py</li>
<li>Makefile: fix .PHONY target</li>
<li>enable -g flag by default</li>
<li>make linker scripts more modular</li>
<li>remove port member from Pin object</li>
<li>modules/machine/pin: add support for IRQ on Pin's</li>
<li>modules/machine/spi: sPIM (EasyDMA) backend for nrf52x</li>
<li>drivers/bluetooth/ble_drv: increase max transfers in progress</li>
<li>gccollect: use the SP register instead of MSP</li>
<li>boards: remove unused defines from board config headers</li>
<li>boards/wt51822_s4at: fixes after nrfx and Pin IRQ introduction</li>
<li>modules/random: rename port config for RNG</li>
<li>modules: align method to resolve pin object</li>
<li>adc: allow for external use of new and value read function</li>
<li>spi: allow for external use of new and transfer function</li>
<li>return immediatly from mp_hal_delay_us if 0us is given</li>
<li>modules/machine/adc: fix to make adc.c compile for nrf51 targets</li>
<li>bluetooth: fixes for s132 v5 BLE stack</li>
<li>Makefile: use "standard" GCC -fshort-enums instead of --short-enums</li>
<li>Makefile: remove -fstack-usage</li>
<li>Makefile: use C11 instead of Gnu99</li>
<li>Makefile: refine dead-code elimination parameters</li>
<li>modules/machine/adc: don't compare -1 to an unsigned number</li>
<li>modules/uos/microbitfs: fix errno defines</li>
<li>modules/uos/microbitfs: remove unused uos_mbfs_mount</li>
<li>enable micro:bit FS by default</li>
<li>boards/feather52: move phony targets to main Makefile</li>
<li>modules/machine/spi: move enable-guard to prevent wrong includes</li>
<li>nrfx_config: move back nrf52832 to use non-EasyDMA SPI</li>
<li>move pyb module to boards module</li>
<li>add support for reading output pin state</li>
<li>generalize feather52 target</li>
<li>bluetooth: add support for s132/s140 v6, remove s132 v2/3/5</li>
<li>boards: check for stack/heap size using an assert</li>
<li>quick-fix on const objects with open array dimension in objtuples</li>
<li>bluetooth: replace BLE REPL (WebBluetooth) URL</li>
<li>add explicit make flag for oofatfs</li>
<li>compile nlr objects with -fno-lto flag</li>
<li>upgrade to nrfx 1.1.0</li>
<li>drivers: add license text to ticker.h and softpwm.h</li>
<li>use mp_raise_ValueError instead of nlr_raise(...)</li>
<li>include $(SRC_MOD) in the build</li>
<li>Makefile: make sure dependencies for pins_gen.c are correct</li>
<li>properly use (void) instead of () for function definitions</li>
<li>boards/microbit: use MICROPY_PY_BUILTINS_FLOAT to detect FP support</li>
<li>update nrfjprog links to allow to download any version</li>
<li>drivers/flash: fix incorrect page alignment check</li>
<li>uos: add mbfs <strong>enter</strong> and <strong>exit</strong> handlers</li>
<li>enable all PWM, RTC and Timer instances for nrf52840</li>
<li>correct index checking of ADC/PWM/RTCounter instances</li>
<li>use separate config for each PWM instance</li>
<li>uart: remove unused UART.char_width field</li>
<li>uart: fix UART.writechar() to write just 1 byte</li>
<li>bluetooth: set GAP_ADV_MAX_SIZE to 31 (s132/s140)</li>
<li>bluetooth: update BLE stack download script</li>
</ul>
<p>pic16bit port:</p>
<ul>
<li>update to compile with latest xc16 v1.35 compiler</li>
</ul>
<p>teensy port:</p>
<ul>
<li>add own uart.h to not rely on stm32's version of the file</li>
</ul>
<p>zephyr port:</p>
<ul>
<li>README: hint about existence of qemu_x86_nommu</li>
<li>main: after builtin testsuite, drop to REPL</li>
<li>mpconfigport.h: enable uhashlib and ubinascii modules</li>
<li>modzsensor: zephyr sensor subsystem bindings</li>
<li>prj_base.conf: enable DHCP and group static IPs together</li>
<li>add prj_disco_l475_iot1.conf with sensor drivers</li>
<li>Makefile: add kobj_types_h_target to Z_EXPORTS</li>
<li>prj_base.conf: remove outdated CONFIG_NET_NBUF_RX_COUNT option</li>
<li>prj_qemu_x86.conf: remove outdated CONFIG_RAM_SIZE</li>
<li>rename CONFIG_CONSOLE_PULL to CONFIG_CONSOLE_SUBSYS</li>
<li>prj_base.conf: update for net_config subsys refactor</li>
<li>CMakeLists: update for latest Zephyr CMake usage refactorings</li>
</ul>
<p>docs:</p>
<ul>
<li>library: add documentation for ucollections.deque</li>
<li>ucryptolib: add docs for new ucryptolib module</li>
<li>usocket: getaddrinfo: describe af/type/proto optional params</li>
<li>usocket: minor fixes to grammar of getaddrinfo</li>
<li>uos: make it clear that block device block_num param is an index</li>
<li>ure: document sub(), groups(), span(), start() and end()</li>
<li>ure: document some more supported regex operators</li>
<li>pyboard: for latex build, use smaller quickref jpg, and no gifs</li>
<li>library: remove "only" directive from all pyb module docs</li>
<li>library/machine.UART: remove conditional docs for wipy port</li>
<li>library/machine: remove conditional docs for wake_reason function</li>
<li>library/machine: remove conditional docs for rng function</li>
<li>library/index: remove all conditionals from library index</li>
<li>library/index: add hint about using help('modules') for discovery</li>
<li>reference/index: remove conditional for inline asm docs</li>
<li>library/machine: remove conditionals in machine class index</li>
<li>move WiPy specific Timer class to separate doc file</li>
<li>library/machine.I2C.rst: clarify availability of primitive I2C ops</li>
<li>library/machine.UART.rst: specify optional txbuf and rxbuf args</li>
<li>library/pyb: add deprecation warning for mount and old block proto</li>
<li>pyboard: fix to use Sphinx style for internal/external links</li>
<li>library/machine.SPI: add note about baudrate imprecision</li>
<li>library/network: move specific network classes to their own file</li>
<li>library/network: make AbstractNIC methods layout correctly</li>
<li>unify all the ports into one set of documentation</li>
<li>remove sphinx_selective_exclude, it's no longer used</li>
<li>wipy: fix links to network.Server, and markup for boot.py</li>
<li>uselect: describe more aspects of poll.register/modify behavior</li>
<li>machine.Pin: add note regarding irq handler argument</li>
<li>machine.Pin: document "hard" argument of Pin.irq method</li>
<li>uio: document StringIO/BytesIO(alloc_size) constructors</li>
<li>library/uctypes: add examples and make general updates</li>
<li>conf.py: use https for intersphinx link to docs.python.org</li>
<li>ure: fully describe supported syntax subset, add example</li>
<li>differences: clarify the differences are against Python 3.4</li>
<li>add initial docs for esp32 port, including quick-ref and general</li>
<li>library: add documentation for esp32 module</li>
</ul>
<p>travis:</p>
<ul>
<li>install explicit version of urllib3 for coveralls</li>
<li>use build stages and parallel jobs under Travis CI</li>
<li>add nrf port to Travis CI build</li>
</ul>
<p>examples:</p>
<ul>
<li>embedding: add code markup and fix typo in README.md</li>
<li>embedding: fix reference to freed memory, lexer src name</li>
<li>embedding: fix hard-coded MP_QSTR_ value</li>
<li>unix/ffi_example: clean up and update the ffi example</li>
</ul>
<p>README:</p>
<ul>
<li>update list of ports to include esp32 and nrf</li>
<li>remove references to "make axtls", it's no longer needed</li>
<li>remove text about selecting different ports in the docs</li>
</ul>dpgeorgetag:github.com,2008:Repository/247252679/v1.9.42018-05-11T06:40:09Zv1.9.4<p>Parser size reduced, new Python stack, stm32 improvements, new esp32 …</p>dpgeorgetag:github.com,2008:Repository/247252679/v1.9.32017-11-01T00:20:08Zv1.9.3: Introduction of ports subdirectory where all ports are moved to<p>The main change in this release is the introduction of a "ports/"<br>
subdirectory at the top-level of the repository, and all of the ports are<br>
moved here. In the process the "stmhal" port is renamed to "stm32" to<br>
better reflect the MCU that it targets. In addition, the STM32 CMSIS and<br>
HAL sources are moved to a new submodule called "stm32lib".</p>
<p>The bytecode has changed in this release, compared to the previous release,<br>
and as a consequence the .mpy version number has increased to version 3.<br>
This means that scripts compiled with the previous mpy-cross must be<br>
recompiled to work with this new version.</p>
<p>There have also been various enhancements and optimisations, such as:<br>
check for valid UTF-8 when creating str objects, support for reverse<br>
special binary operations like <strong>radd</strong>, full domain checking in the math<br>
module, support for floor-division and modulo in the viper emitter,<br>
and addition of stack overflow checking when executing a regex.</p>
<p>The stm32 port sees improved support for F7 MCUs, addition of a new board<br>
B_L475E_IOT01A based on the STM32L475, and support for the Wiznet W5500<br>
chipset along with improved socket behaviour.</p>
<p>A detailed list of changes follows.</p>
<p>py core:</p>
<ul>
<li>objstr: startswith, endswith: check arg to be a string</li>
<li>nlrx86,x64: replace #define of defined() with portable macro usage</li>
<li>objtype: handle NotImplemented return from binary special methods</li>
<li>objtype: mp_obj_class_lookup: improve debug logging</li>
<li>map: remove unused new/free functions</li>
<li>make m_malloc_fail() have void return type, since it doesn't return</li>
<li>modstruct: in struct.pack, stop converting if there are no args left</li>
<li>modstruct: check and prevent buffer-read overflow in struct unpacking</li>
<li>modstruct: check and prevent buffer-write overflow in struct packing</li>
<li>nlrthumb: get working again on standard Thumb arch (ie not Thumb2)</li>
<li>objfloat: fix binary ops with incompatible objects</li>
<li>obj: fix comparison of float/complex NaN with itself</li>
<li>objtype: implement fallback for instance inplace special methods</li>
<li>objtuple: properly implement comparison with incompatible types</li>
<li>objstr: add check for valid UTF-8 when making a str from bytes</li>
<li>objlist: properly implement comparison with incompatible types</li>
<li>runtime0.h: move relational ops to the beginning of mp_binary_op_t</li>
<li>runtime0.h: move MP_BINARY_OP_DIVMOD to the end of mp_binary_op_t</li>
<li>objtype: make sure mp_binary_op_method_name has full size again</li>
<li>runtime0.h: put inplace arith ops in front of normal operations</li>
<li>builtinhelp: simplify code slightly by extracting object type</li>
<li>runtime: implement dispatch for "reverse op" special methods</li>
<li>nlrx86: fix building for Android/x86</li>
<li>builtinhelp: change signature of help text var from pointer to array</li>
<li>runtime.h: change empty mp_warning macro so var-args are non empty</li>
<li>modbuiltins: implement abs() by dispatching to MP_UNARY_OP_ABS</li>
<li>{objfloat,objcomplex}: optimise MP_UNARY_OP_ABS by reusing variables</li>
<li>mpconfig.h: add note that using computed gotos in VM is not C99</li>
<li>objstr: strip: don't strip "\0" by default</li>
<li>objexcept: prevent infinite recursion when allocating exceptions</li>
<li>stream: remove unnecessary checks for NULL return from vstr_add_len</li>
<li>vstr: raise a RuntimeError if fixed vstr buffer overflows</li>
<li>vm: use lowercase letter at start of exception message</li>
<li>persistentcode: define mp_raw_code_save_file() for any unix target</li>
<li>add config option to print warnings/errors to stderr</li>
<li>objfloat: support raising a negative number to a fractional power</li>
<li>objset: simplify set and frozenset by separating their locals dicts</li>
<li>objset: check that RHS of a binary op is a set/frozenset</li>
<li>objset: include the failed key in a KeyError raised from set.remove</li>
<li>objtype: change type of enum-to-qstr table to uint16_t to save space</li>
<li>objstr: make empty bytes object have a null-terminating byte</li>
<li>mpprint: only check for null string printing when NDEBUG not defined</li>
<li>objtype: clean up unary- and binary-op enum-to-qstr mapping tables</li>
<li>persistentcode: bump .mpy version number to version 3</li>
<li>bc: update opcode_format_table to match the bytecode</li>
<li>modmath: add full checks for math domain errors</li>
<li>modmath: convert log2 macro into a function</li>
<li>formatfloat: don't print the negative sign of a NaN value</li>
<li>formatfloat: use standard isinf, isnan funcs instead of custom ones</li>
<li>modbuiltins: use existing utf8_get_char helper in builtin ord func</li>
<li>emitnative: implement floor-division and modulo for viper emitter</li>
<li>objtype: use CPython compatible method name for sizeof</li>
<li>objtype: fit qstrs for special methods in byte type</li>
<li>objtype: define all special methods if requested</li>
<li>objtype: introduce MICROPY_PY_ALL_INPLACE_SPECIAL_METHODS</li>
</ul>
<p>extmod:</p>
<ul>
<li>modubinascii: only include uzlib/tinf.h when it's really needed</li>
<li>modussl_mbedtls: allow to compile with MBEDTLS_DEBUG_C disabled</li>
<li>machine_pinbase: put PinBase singleton in ROM</li>
<li>re1.5: upgrade to v0.8.2, adds hook for stack overflow checking</li>
<li>modure: add stack overflow checking when executing a regex</li>
<li>uos_dupterm: update uos.dupterm() and helper funcs to have index</li>
<li>uos_dupterm: swallow any errors from dupterm closing the stream</li>
<li>vfs: replace VLA in proxy func with small, static sized array</li>
<li>modussl: add finaliser support for ussl objects</li>
<li>modussl_mbedtls: allow to compile with unix coverage build</li>
</ul>
<p>lib:</p>
<ul>
<li>add new submodule, stm32lib containing STM32 CMSIS and HAL source</li>
<li>embed/abort_: use mp_raise_msg helper function</li>
<li>libm: fix tanhf so that it correctly handles +/- infinity args</li>
<li>libm: remove implementation of log2f, use MP_NEED_LOG2 instead</li>
<li>axtls: update, support for SSL_EAGAIN return code</li>
<li>berkeley-db-1.xx: update, allow to override MINCACHE, DEFPSIZE</li>
</ul>
<p>drivers:</p>
<ul>
<li>memory/spiflash: change from hard-coded soft SPI to generic SPI</li>
<li>display/ssd1306.py: improve performance of graphics methods</li>
<li>nrf24l01: make nRF24L01 test script more portable</li>
<li>display/ssd1306: implement SSD1306_I2C poweron method</li>
<li>display/ssd1306: make poweron() work the same with SSD1306_SPI</li>
<li>wiznet5k: improve the performance of socket ops with threading</li>
<li>wiznet5k: get low-level W5500 driver working</li>
</ul>
<p>tools:</p>
<ul>
<li>upip: upgrade to 1.2.2</li>
<li>pyboard: use repr() when quoting data in error messages</li>
<li>pyboard: update docstring for additional device support</li>
</ul>
<p>tests:</p>
<ul>
<li>object_new: better messages, check user <strong>new</strong>() method</li>
<li>class_new: add checks for <strong>init</strong> being called and other improvements</li>
<li>class_new: add another testcase for <strong>new</strong>/<strong>init</strong> interaction</li>
<li>class_inplace_op: test for inplace op fallback to normal one</li>
<li>run-bench-tests: update locations of executables, now in ports/</li>
<li>class_reverse_op: test for reverse arith ops special methods</li>
<li>run-tests: skip class_inplace_op for minimal profile</li>
<li>run-tests: fix copy-paste mistake in var name</li>
<li>cpydiff: add cases for locals() discrepancies</li>
<li>extmod: add test for ure regexes leading to infinite recursion</li>
<li>extmod: add test for '-' in character class in regex</li>
<li>run-tests: close device under test using "finally"</li>
<li>net_inet: update tls test to work with CPython and incl new site</li>
</ul>
<p>unix port:</p>
<ul>
<li>rename modsocket.c to modusocket.c</li>
<li>modusocket: remove #if MICROPY_SOCKET_EXTRA code blocks</li>
<li>enable MICROPY_PY_REVERSE_SPECIAL_METHODS</li>
</ul>
<p>stm32 port:</p>
<ul>
<li>modmachine: make machine.bootloader() work when MPU is enabled</li>
<li>modmachine: improve support for sleep/deepsleep on F7 MCUs</li>
<li>compute PLL freq table during build instead of at run time</li>
<li>modmachine: for F7 MCU, save power by reducing internal volt reg</li>
<li>boards/pllvalues.py: make script work with both Python 2 and 3</li>
<li>Makefile: use lib/stm32lib instead of local cmsis and hal files</li>
<li>remove cmsis and hal files, they are now a submodule</li>
<li>Makefile: automatically fetch stm32lib submodule if needed</li>
<li>update to new STM Cube HAL library</li>
<li>fix clock initialisation of L4 MCUs</li>
<li>rename stmhal port directory to stm32</li>
<li>remove unused usbd_msc.c file</li>
<li>boards: change remaining stm32f4xx_hal_conf.h to unix line ending</li>
<li>boards: change linker scripts to use "K" instead of hex byte size</li>
<li>boards: fix I2C1 pin mapping on NUCLEO_F401RE/F411RE boards</li>
<li>i2c: when scanning for I2C devices only do 1 probe per address</li>
<li>modnwwiznet5k: release the GIL on blocking network operations</li>
<li>boards: add new board B_L475E_IOT01A based on STM32L475</li>
<li>make-stmconst.py: make sure mpz const data lives in ROM</li>
<li>timer: make pyb.Timer() instances persistent</li>
<li>mpconfigport.h: add configuration for max periphs on L4 series</li>
<li>usbdev: make the USBD callback struct const so it can go in ROM</li>
<li>usbdev: change static function variable to non-static</li>
<li>usbdev: put all CDC state in a struct</li>
<li>usbdev: put all HID state in a struct</li>
<li>usbdev: simplify CDC tx/rx buffer passing</li>
<li>usbdev: simplify HID tx/rx buffer passing</li>
<li>usbdev/core: add state parameter to all callback functions</li>
<li>usbdev: put all state for the USB device driver in a struct</li>
<li>usbdev: simplify pointers to MSC state and block dev operations</li>
<li>usbdev: merge all global USB device state into a single struct</li>
<li>usbdev: make device descriptor callbacks take a state pointer</li>
<li>usbdev: move all the USB device descriptor state into its struct</li>
<li>timer: enable ARPE so that timer freq can be changed smoothly</li>
<li>modnwwiznet5k: get the IP address of an established socket</li>
<li>boards: fix typos in stm32f767_af.csv table</li>
<li>usbd_cdc_interface: don't reset CDC output buf on initialisation</li>
<li>modnwwiznet5k: implement WIZNET5K.isconnected() method</li>
<li>modusocket: make getaddrinfo() work when passed an IP address</li>
<li>modusocket: return OSError(-2) if getaddrinfo fails</li>
<li>mpconfigport.h: add MICROPY_THREAD_YIELD() macro</li>
<li>modnwwiznet5k: add support for W5500 Ethernet chip</li>
<li>modnwwiznet5k: increase SPI bus speed to 42MHz</li>
<li>modnwwiznet5k: implement stream ioctl for the Wiznet driver</li>
<li>mphalport: improve efficiency of mp_hal_stdout_tx_strn_cooked</li>
<li>make uos.dupterm() conform to specs by using extmod version</li>
</ul>
<p>cc3200 port:</p>
<ul>
<li>enable micropython.kbd_intr() method</li>
<li>use standard implementation of keyboard interrupt</li>
</ul>
<p>esp8266 port:</p>
<ul>
<li>rename axtls_helpers.c to posix_helpers.c</li>
<li>posix_helpers: set ENOMEM on memory alloc failure</li>
<li>set DEFPSIZE=1024, MINCACHE=3 for "btree" module</li>
<li>esp_mphal: send data in chunks to mp_uos_dupterm_tx_strn</li>
<li>modnetwork: add "bssid" keyword arg to WLAN.connect() method</li>
<li>modules/webrepl_setup: add info about allowed password length</li>
</ul>
<p>zephyr port:</p>
<ul>
<li>Makefile: revamp "test" target after ports were moved to ports/</li>
<li>use CONFIG_NET_APP_SETTINGS to setup initial network addresses</li>
<li>switch to interrupt-driven pull-style console</li>
</ul>
<p>pic16bit port:</p>
<ul>
<li>add definition of SEEK_SET to unistd.h</li>
</ul>
<p>docs:</p>
<ul>
<li>pyboard/tutorial: add "timeout=0" to UART in pass-through example</li>
<li>more xrefs to "MicroPython port" in glossary</li>
<li>library/network: fix ref to "socket" module (should be "usocket")</li>
<li>machine.Signal: improve style/grammar and add usage example</li>
<li>library: add description of "index" parameter to uos.dupterm()</li>
<li>library/micropython: fix typo in RST formatting</li>
<li>library/framebuf.rst: generalise constructor to all colour formats</li>
<li>btree: describe page caching policy of the underlying implementation</li>
<li>esp8266/tutorial: update neopixel with example of using 4 bbp</li>
<li>library/network: clarify usage of "bssid" arg in connect() method</li>
<li>pyboard/quickref: add info for Switch, RTC, CAN, Accel classes</li>
<li>pyboard/tutorial: update now that yellow LED also supports PWM</li>
<li>esp8266/quickref: add quickref info for RTC class</li>
<li>library: add missing cross-ref links for classes in pyb module</li>
<li>library/network: update docs to state that W5500 is supported</li>
<li>uselect: document one-shot polling mode</li>
<li>usocket: elaborate descriptions</li>
<li>usocket: document inet_ntop(), inet_pton()</li>
<li>library/network: add dhcp_hostname parameter</li>
<li>reference/isr_rules: minor typo correction</li>
<li>ussl: fix module name refs and use "MicroPython port" term</li>
<li>esp8266/general: add section on TLS limitations</li>
<li>usocket: document that settimeout() isn't supported by all ports</li>
<li>ure: add "|" (alternative) to the list of supported operators</li>
<li>reference/isr_rules.rst: add tutorial on use of micropython.schedule()</li>
</ul>
<p>travis:</p>
<ul>
<li>use --upgrade when pip is installing cpp-coveralls</li>
<li>update build command now that stm32 Wiznet config has changed</li>
</ul>
<p>examples:</p>
<ul>
<li>hwconfig_console: add .on()/.off() methods</li>
</ul>
<p>all:</p>
<ul>
<li>convert mp_uint_t to mp_unary_op_t/mp_binary_op_t where appropriate</li>
<li>convert remaining "mp_uint_t n_args" to "size_t n_args"</li>
<li>make new ports/ sub-directory and move all ports there</li>
<li>update Makefiles and others to build with new ports/ dir layout</li>
<li>remove inclusion of internal py header files</li>
<li>use NULL instead of "" when calling mp_raise exception helpers</li>
</ul>
<p>README:</p>
<ul>
<li>update "Dependencies" section</li>
<li>add explicit section on contributing</li>
<li>add gcc and arm-none-eabi-newlib to list of required components</li>
</ul>
<p>.gitattributes:</p>
<ul>
<li>remove obsolete entries for stmhal/hal, stmhal/cmsis</li>
<li>add entries for files that will move to ports/ dir</li>
</ul>dpgeorgetag:github.com,2008:Repository/247252679/v1.9.22017-08-23T01:46:41Zv1.9.2: Double precision math library and support on pyboard, and improved ussl<p>This release brings general improvements and bug fixes to the core and<br>
various ports, as well as documentation additions, clean-ups and better<br>
consistency. And effort has been made to clean up the source code to<br>
make it more consistent across the core and all ports.</p>
<p>There is a new tool "mpy_bin2res.py" to convert arbitrary (binary) files<br>
to Python resources for inclusion in source code (frozen or otherwise).</p>
<p>The ussl module has seen improvements, including implementation of<br>
server_hostname (for axtls) and server_side mode (for mbedtls).</p>
<p>There is now a double-precision float math library and stmhal has support<br>
to build firmware with software or hardware double-precision.</p>
<p>A detailed list of changes follows.</p>
<p>py core:</p>
<ul>
<li>formatfloat: fix number of digits and exponent sign when rounding</li>
<li>modthread: raise RuntimeError in release() if lock is not acquired</li>
<li>compile: raise SyntaxError if positional args are given after <em>/</em>*</li>
<li>objint: support "big" byte-order in int.to_bytes()</li>
<li>objint: in to_bytes(), allow length arg to be any int and check sign</li>
<li>compile: fix bug with break/continue in else of optimised for-range</li>
<li>compile: optimise emitter label indices to save a word of heap</li>
<li>builtinimport: remove unreachable code for relative imports</li>
<li>objnamedtuple: simplify and remove use of alloca building namedtuple</li>
<li>mpprint: remove unreachable check for neg return of mp_format_float</li>
<li>binary: add missing "break" statements</li>
<li>runtime: mark m_malloc_fail() as NORETURN</li>
<li>objstr: remove unnecessary "sign" variable in formatting code</li>
<li>vm: make "if" control flow more obvious in YIELD_FROM opcode</li>
<li>modmath: check for zero division in log with 2 args</li>
<li>makeversionhdr.py: update to parse new release line in docs/conf.py</li>
<li>objdict: factorise dict accessor helper to reduce code size</li>
<li>change mp_uint_t to size_t in builtins code</li>
<li>repl: change mp_uint_t to size_t in repl helpers</li>
<li>compile: combine arith and bit-shift ops into 1 compile routine</li>
<li>compile: use switch-case to match token and operator</li>
<li>objgenerator: allow to hash generators and generator instances</li>
<li>gc: refactor assertions in gc_free function</li>
<li>vm: make n_state variable local to just set-up part of VM</li>
<li>asmx64: support moving a 64-bit immediate to one of top 8 registers</li>
<li>modmicropython: cast stack_limit value so it prints correctly</li>
<li>builtinevex: add typechecking of globals/locals args to eval/exec</li>
<li>py.mk: make berkeley-db C-defs apply only to relevant source files</li>
<li>mperrno: allow mperrno.h to be correctly included before other hdrs</li>
<li>mpz: make mpz_is_zero() an inline function</li>
<li>implement raising a big-int to a negative power</li>
<li>mkrules.mk: show frozen modules sizes together with executable size</li>
<li>objtuple: allow to use inplace-multiplication operator on tuples</li>
<li>objstr: raise an exception for wrong type on RHS of str binary op</li>
<li>modsys: initial implementation of sys.getsizeof()</li>
<li>binary.c: fix bug when packing big-endian 'Q' values</li>
<li>add verbose debug compile-time flag MICROPY_DEBUG_VERBOSE</li>
<li>binary: change internal bytearray typecode from 0 to 1</li>
<li>objstringio: prevent offset wraparound for io.BytesIO objects</li>
<li>objstringio: fix regression with handling SEEK_SET</li>
<li>stream: seek: Consistently handle negative offset for SEEK_SET</li>
<li>mkrules.mk: use "find -path" when searching for frozen obj files</li>
<li>compile: remove unused pn_colon code when compiling func params</li>
<li>objcomplex: remove unnecessary assignment of variable</li>
<li>formatfloat: don't post-increment variable that won't be used again</li>
<li>use "static inline" for funcs that should be inline</li>
<li>asmthumb: use existing macro to properly clear the D-cache</li>
</ul>
<p>extmod:</p>
<ul>
<li>modussl_axtls: update for axTLS 2.1.3</li>
<li>modussl_axtls: implement server_hostname arg to wrap_socket()</li>
<li>move modonewire.c from esp8266 to extmod directory</li>
<li>modure: if input string is bytes, return bytes results too</li>
<li>modubinascii: add check for empty buffer passed to hexlify</li>
<li>modussl_axtls: allow to close ssl stream multiple times</li>
<li>modussl_mbedtls: support server_side mode</li>
<li>modussl_mbedtls: when reading and peer wants to close, return 0</li>
<li>modframebuf: fix invalid stride for odd widths in GS4_HMSB fmt</li>
<li>modussl_mbedtls: make socket.close() free all TLS resources</li>
<li>modframebuf: consistently use "col" as name for colour variables</li>
<li>modussl_mbedtls: implement non-blocking SSL sockets</li>
<li>machine_signal: fix parsing of invert arg when Pin is first arg</li>
<li>modframebuf: use correct initialization for .locals_dict</li>
<li>modlwip: implement setsockopt(IP_ADD_MEMBERSHIP)</li>
<li>modussl_mbedtls.c: add ussl.getpeercert() method</li>
<li>modubinascii: rewrite mod_binascii_a2b_base64</li>
<li>modubinascii: don't post-increment variable that won't be used</li>
<li>modonewire: rename public module to mp_module_onewire</li>
<li>for uos.stat interpret st_size member as an unsigned int</li>
<li>use "static inline" for funcs that should be inline</li>
</ul>
<p>lib:</p>
<ul>
<li>axtls: upgrade to axTLS 2.1.3 + MicroPython patchset</li>
<li>libm/math: remove implementations of float conversion functions</li>
<li>add libm_dbl, a double-precision math library, from musl-1.1.16</li>
</ul>
<p>drivers:</p>
<ul>
<li>onewire: move onewire.py, ds18x20.py from esp8266 to drivers</li>
<li>onewire: enable pull-up when init'ing the 1-wire pin</li>
</ul>
<p>tools:</p>
<ul>
<li>gen-cpydiff: use case description as 3rd-level heading</li>
<li>pyboard: add license header</li>
<li>mpy_bin2res: tools to convert binary resources to Python module</li>
<li>mpy-tool.py: don't generate const_table if it's empty</li>
<li>mpy-tool.py: fix missing argument in dump() function</li>
</ul>
<p>tests:</p>
<ul>
<li>net_inet/test_tls_sites.py: integration test for SSL connections</li>
<li>net_inet: add tests for accept and connect in nonblocking mode</li>
<li>basics: add tests for for-else statement</li>
<li>net_inet: move tests which don't require full Internet to net_hosted</li>
<li>connect_nonblock: refactor towards real net_hosted test</li>
<li>auto detect floating point capabilites of the target</li>
<li>import: add a test for the builtin <strong>import</strong> function</li>
<li>import: update comment now that uPy raises correct exception</li>
<li>basics/namedtuple1: add test for creating with pos and kw args</li>
<li>unix/extra_coverage: add test for mp_vprintf with bad fmt spec</li>
<li>basics: add tests for arithmetic operators precedence</li>
<li>cpydiff/modules_deque: elaborate workaround</li>
<li>cpydiff/core_class_mro: move under Classes, add workaround</li>
<li>cpydiff/core_arguments: move under Functions subsection</li>
<li>cpydiff/core_class_supermultiple: same cause as core_class_mro</li>
<li>cpydiff: improve wording, add more workarounds</li>
<li>cpydiff: add case for str.ljust/rjust</li>
<li>rename exec1.py to builtin_exec.py</li>
<li>basics/builtin_exec: test various globals/locals args to exec()</li>
</ul>
<p>minimal port:</p>
<ul>
<li>Makefile: enable gc-sections to remove unused code</li>
<li>remove unused stmhal include from Makefile</li>
<li>use size_t for mp_builtin_open argument</li>
</ul>
<p>unix port:</p>
<ul>
<li>modtime: replace strftime() with localtime()</li>
<li>mpconfigport.mk: update descriptions of readline and TLS options</li>
<li>Makefile: disable assertions in the standard unix executable</li>
<li>modjni: convert to mp_rom_map_elem_t</li>
<li>for uos.stat interpret st_size member as an unsigned int</li>
</ul>
<p>stmhal port:</p>
<ul>
<li>mpconfigport.h: remove config of PY_THREAD_GIL to use default</li>
<li>make error messages more consistent across peripherals</li>
<li>add initial implementation of Pin.irq() method</li>
<li>add .value() method to Switch object, to mirror Pin and Signal</li>
<li>move pybstdio.c to lib/utils/sys_stdio_mphal.c for common use</li>
<li>add "quiet timing" enter/exit functions</li>
<li>make available the _onewire module, for low-level bus control</li>
<li>modules: provide sym-link to onewire.py driver</li>
<li>boards/stm32f405.ld: increase FLASH_TEXT to end of 1MiB flash</li>
<li>sdcard: allow a board to customise the SDIO pins</li>
<li>add possibility to build with double-precision floating point</li>
<li>boards: enable double-prec FP on F76x boards</li>
<li>Makefile: use hardware double-prec FP for MCUs that support it</li>
<li>Makefile: rename FLOAT_IMPL to MICROPY_FLOAT_IMPL to match C name</li>
<li>Makefile: add CFLAGS_EXTRA to CFLAGS so cmdline can add options</li>
<li>mpconfigport.h: allow MICROPY_PY_THREAD to be overridden</li>
<li>boards: add configuration files for NUCLEO_F429ZI</li>
<li>boards/NUCLEO_F429ZI: change USB config from HS to FS peripheral</li>
<li>reduce size of ESPRUINO_PICO build so it fits in flash</li>
<li>servo: make pyb.Servo(n) map to Pin('Xn') on all MCUs</li>
<li>servo: don't compile servo code when it's not enabled</li>
<li>use "static inline" for funcs that should be inline</li>
</ul>
<p>cc3200 port:</p>
<ul>
<li>modusocket: simplify socket.makefile() function</li>
<li>make non-zero socket timeout work with connect/accept/send</li>
<li>modusocket: fix connect() when in non-blocking or timeout mode</li>
<li>use the name MicroPython consistently in code</li>
</ul>
<p>esp8266 port:</p>
<ul>
<li>Makefile: bump axTLS TLS record buffer size to 5K</li>
<li>Makefile: allow FROZEN_DIR,FROZEN_MPY_DIR to be overridden</li>
<li>Makefile: add LIB_SRC_C variable to qstr auto-extraction list</li>
<li>make onewire module and support code usable by other ports</li>
<li>modonewire: move low-level 1-wire bus code to modonewire.c</li>
<li>modonewire: make timings static and remove onewire.timings func</li>
<li>reinstate 1-wire scripts by sym-linking to drivers/onewire/</li>
<li>move mp_hal_pin_open_drain from esp_mphal.c to machine_pin.c</li>
<li>enable MICROPY_ENABLE_FINALISER</li>
<li>README: make "Documentation" a top-level section</li>
<li>machine_rtc: use correct arithmetic for aligning RTC mem len</li>
<li>mpconfigport_512k: use terse error messages to get 512k to fit</li>
<li>mpconfigport.h: make socket a weak link</li>
<li>modesp: remove unused constants: STA_MODE, etc</li>
<li>general: add known issue of WiFi RX buffers overflow</li>
<li>use size_t for mp_builtin_open argument</li>
<li>fix UART stop bit constants</li>
</ul>
<p>zephyr port:</p>
<ul>
<li>Makefile: rework dependencies and "clean" target</li>
<li>Makefile: revert prj.conf construction rule to the previous state</li>
<li>remove long-obsolete machine_ptr_t typedef's</li>
<li>Makefile: explicitly define default target as "all"</li>
<li>modusocket: allow to use socketized net_context in upstream</li>
<li>modusocket: socket, close: switch to native Zephyr socket calls</li>
<li>modusocket: bind, connect, listen, accept: Swtich to native sockets</li>
<li>modusocket: send: switch to native sockets</li>
<li>modusocket: recv: switch to native sockets</li>
<li>modusocket: fully switch to native Zephyr sockets</li>
<li>modzephyr: add current_tid() and stacks_analyze() functions</li>
<li>prj_base.conf: enable CONFIG_INIT_STACKS</li>
<li>modusocket: update struct sockaddr family field name</li>
<li>prj_96b_carbon.conf: re-enable networking on Carbon</li>
<li>modzephyr: add shell_net_iface() function</li>
</ul>
<p>docs:</p>
<ul>
<li>btree: add hints about opening db file and need to flush db</li>
<li>select: rename to uselect, to match the actual module name</li>
<li>license: update copyright year</li>
<li>esp8266/tutorial/intro: discourage use of 512kb firmwares</li>
<li>esp8266/tutorial/intro: Sphinx requires blank lines around literal blocks</li>
<li>conf.py: include 3 levels of ToC in latexpdf output</li>
<li>gc: mark mem_alloc()/mem_free() as uPy-specific</li>
<li>gc: document gc.threshold() function</li>
<li>builtins: list builtin exceptions</li>
<li>conf.py: set default_role = 'any'</li>
<li>lcd160cr: group related constants together and use full sentences</li>
<li>ref/speed_python: update and make more hardware-neutral</li>
<li>library/gc: fix grammar and improve readability of gc.threshold()</li>
<li>move all ports docs to the single ToC</li>
<li>topindex.html: remove link to wipy.io, it's no longer available</li>
<li>conf.py: add .venv dir to exclude_patterns</li>
<li>move topindex.html to templates/ subdir</li>
<li>differences/index_template: use consistent heading casing</li>
<li>builtins: add AssertionError, SyntaxError, ZeroDivisionError</li>
<li>add glossary</li>
<li>conf.py: switch to "new" format of intersphinx_mapping</li>
<li>conf.py: add file for global replacements definition</li>
<li>library: add CPython docs xref to each pertinent module</li>
<li>replace.inc: add |see_cpython|, to xref individual symbols from CPython</li>
<li>conf.py: set "version" and "release" to the same value</li>
<li>*_index: drop "Indices and tables" pseudo-section</li>
<li>pyboard: move hardware info into General Info chapter</li>
<li>uerrno: document "uerrno" module</li>
<li>esp8266/general.rst: fix name of NTP module</li>
<li>pyboard: move info about using Windows from topindex to general</li>
<li>uzlib: update description of decompress() and mention DecompIO</li>
<li>pyboard/tutorial/amp_skin: add example for playing large WAV files</li>
<li>library/ubinascii: update base64 docs</li>
<li>library/usocket: move socket.error to its own section</li>
<li>library/usocket: describe complete information on address formats</li>
<li>glossary: elaborate on possible MicroPython port differences</li>
<li>glossary: fix typos in micropython-lib paragraph</li>
<li>index: rewrite introduction paragraph to avoid confusion</li>
<li>use the name MicroPython consistently in documentation</li>
<li>consistently link to micropython-lib in glossary</li>
</ul>
<p>all:</p>
<ul>
<li>make more use of mp_raise_{msg,TypeError,ValueError} helpers</li>
<li>unify header guard usage</li>
<li>remove trailing spaces, per coding conventions</li>
<li>don't include system errno.h when it's not needed</li>
<li>use the name MicroPython consistently in comments</li>
<li>make use of $(TOP) variable in Makefiles, instead of ".."</li>
<li>raise exceptions via mp_raise_XXX</li>
<li>make static dicts use mp_rom_map_elem_t type and MP_ROM_xxx macros</li>
</ul>
<p>README:</p>
<ul>
<li>mention support for bytecode and frozen bytecode</li>
<li>improve description of precompiled bytecode; mention mpy-cross</li>
</ul>
<p>CODECONVENTIONS:</p>
<ul>
<li>clarify MicroPython changes sign-off process</li>
<li>start to describe docs conventions</li>
<li>describe docs use of markup for None/True/False</li>
</ul>
<p>travis:</p>
<ul>
<li>build STM32F769DISC board instead of F7DISC to test dbl-prec FP</li>
<li>pin cpp-coveralls at 0.3.12</li>
</ul>dpgeorgetag:github.com,2008:Repository/247252679/v1.9.12017-06-11T13:04:05Zv1.9.1: Fixes for stmhal USB mass storage, lwIP bindings and VFS regressions<p>This release provides an important fix for the USB mass storage device in<br>
the stmhal port by implementing the SCSI SYNCHRONIZE_CACHE command, which<br>
is now require by some Operating Systems. There are also fixes for the<br>
lwIP bindings to improve non-blocking sockets and error codes. The VFS has<br>
some regressions fixed including the ability to statvfs the root.</p>
<p>All changes are listed below.</p>
<p>py core:</p>
<ul>
<li>modbuiltins: add core-provided version of input() function</li>
<li>objstr: catch case of negative "maxsplit" arg to str.rsplit()</li>
<li>persistentcode: allow to compile with complex numbers disabled</li>
<li>objstr: allow to compile with obj-repr D, and unicode disabled</li>
<li>modsys: allow to compile with obj-repr D and PY_ATTRTUPLE disabled</li>
<li>provide mp_decode_uint_skip() to help reduce stack usage</li>
<li>makeqstrdefs.py: make script run correctly with Python 2.6</li>
<li>objstringio: if created from immutable object, follow copy on write policy</li>
</ul>
<p>extmod:</p>
<ul>
<li>modlwip: connect: for non-blocking mode, return EINPROGRESS</li>
<li>modlwip: fix error codes for duplicate calls to connect()</li>
<li>modlwip: accept: fix error code for non-blocking mode</li>
<li>vfs: allow to statvfs the root directory</li>
<li>vfs: allow "buffering" and "encoding" args to VFS's open()</li>
<li>modframebuf: fix signed/unsigned comparison pendantic warning</li>
</ul>
<p>lib:</p>
<ul>
<li>libm: use isfinite instead of finitef, for C99 compatibility</li>
<li>utils/interrupt_char: remove support for KBD_EXCEPTION disabled</li>
</ul>
<p>tests:</p>
<ul>
<li>basics/string_rsplit: add tests for negative "maxsplit" argument</li>
<li>float: convert "sys.exit()" to "raise SystemExit"</li>
<li>float/builtin_float_minmax: PEP8 fixes</li>
<li>basics: convert "sys.exit()" to "raise SystemExit"</li>
<li>convert remaining "sys.exit()" to "raise SystemExit"</li>
</ul>
<p>unix port:</p>
<ul>
<li>convert to use core-provided version of built-in import()</li>
<li>Makefile: replace references to make with $(MAKE)</li>
</ul>
<p>windows port:</p>
<ul>
<li>convert to use core-provided version of built-in import()</li>
</ul>
<p>qemu-arm port:</p>
<ul>
<li>Makefile: adjust object-file lists to get correct dependencies</li>
<li>enable micropython.mem_*() functions to allow more tests</li>
</ul>
<p>stmhal port:</p>
<ul>
<li>boards: enable DAC for NUCLEO_F767ZI board</li>
<li>add support for NUCLEO_F446RE board</li>
<li>pass USB handler as parameter to allow more than one USB handler</li>
<li>usb: use local USB handler variable in Start-of-Frame handler</li>
<li>usb: make state for USB device private to top-level USB driver</li>
<li>usbdev: for MSC implement SCSI SYNCHRONIZE_CACHE command</li>
<li>convert from using stmhal's input() to core provided version</li>
</ul>
<p>cc3200 port:</p>
<ul>
<li>convert from using stmhal's input() to core provided version</li>
</ul>
<p>teensy port:</p>
<ul>
<li>convert from using stmhal's input() to core provided version</li>
</ul>
<p>esp8266 port:</p>
<ul>
<li>Makefile: replace references to make with $(MAKE)</li>
<li>Makefile: add clean-modules target</li>
<li>convert from using stmhal's input() to core provided version</li>
</ul>
<p>zephyr port:</p>
<ul>
<li>modusocket: getaddrinfo: Fix mp_obj_len() usage</li>
<li>define MICROPY_PY_SYS_PLATFORM (to "zephyr")</li>
<li>machine_pin: use native Zephyr types for Zephyr API calls</li>
</ul>
<p>docs:</p>
<ul>
<li>machine.Pin: remove out_value() method</li>
<li>machine.Pin: add on() and off() methods</li>
<li>esp8266: consistently replace Pin.high/low methods with .on/off</li>
<li>esp8266/quickref: polish Pin.on()/off() examples</li>
<li>network: move confusingly-named cc3200 Server class to its reference</li>
<li>uos: deconditionalize, remove minor port-specific details</li>
<li>uos: move cc3200 port legacy VFS mounting functions to its ref doc</li>
<li>machine: sort machine classes in logical order, not alphabetically</li>
<li>network: first step to describe standard network class interface</li>
</ul>
<p>examples:</p>
<ul>
<li>embedding: use core-provided KeyboardInterrupt object</li>
</ul>dpgeorgetag:github.com,2008:Repository/247252679/v1.92017-05-26T09:07:45Zv1.9: New VFS subsystem and scheduling framework, and less need for the heap<p>This release adds some fundamental new components, allows for more Python<br>
operations without using the heap and has reduced code size and stack<br>
usage.</p>
<p>Changes in the way iterators are handled allows to iterate without<br>
allocating on the heap for the types: tuple, list, str, bytes, bytearray,<br>
array, dict, set, frozenset. It also allows to call the builtins all, any,<br>
min max and sum without allocating heap memory for the iterator argument.<br>
And improvements to the handling of super() means that super().foo() method<br>
calls are now heap-less.</p>
<p>A new generic VFS subsystem has been added which allows to mount arbitrary<br>
filesystems (even written in Python) at the root or at a mount-point within<br>
the root. The FatFS driver has been replaced with an object-oriented<br>
version (oofatfs) which allows a fully customisable filesystem layout.</p>
<p>A scheduling framework has been implemented in the core which gives the<br>
ability to schedule callbacks to be called "as soon as possible". This<br>
allows ports to implement "soft IRQs" which allow the programmer to<br>
allocate memory during an interrupt handler, at the cost of some<br>
performance related to response time of the handler. The new<br>
micropython.schedule() function gives access to the scheduler.</p>
<p>Other improvements to the core include: consts can now be big-nums, for<br>
example "X = const(1 << 100)"; addition of "help('modules')" to list<br>
available modules; stack usage reduced for a Python call by 8 bytes on ARM<br>
Cortex-M architectures; micropython.kbd_intr() function added to disable<br>
Ctrl-C capture; addition of uio.resource_stream(); mpy-cross is built<br>
automatically if needed; a helper tool mpy_cross_all.py is added to run<br>
mpy-cross on an entire project.</p>
<p>The bytecode has changed in this version so existing .mpy files will need<br>
recompiling. There have also been some changes to the C API, most notably<br>
with mp_uint_t changed to size_t in many places.</p>
<p>In the extended modules the following main changes have been made: addition<br>
of machine.Signal class to allow inversion on a Pin; framebuf has new<br>
formats of the form MONO_xxx; addition of uselect.ipoll() for allocation-<br>
free polling; addition of uos.ilistdir() for efficient iteration of a<br>
directory listing; machine.Pin high/low methods are renamed to on/off in<br>
esp8266 and zephyr (this is a backwards-incompatible change);<br>
machine.time_pulse_us() function no longer throws exceptions, but returns<br>
negative values instead.</p>
<p>For stmhal the pyb.fault_debug() function is added, and default behaviour<br>
for a hard-fault is now an immediate reset. There is better support for F7<br>
MCUs, in particular DMA and SD card support. A bug has been fixed with the<br>
USB VCP (USB serial) where it would in rare cases (usually when the host PC<br>
was under load) would lose characters. Pyboard now automatically mounts<br>
all available partitions on the SD card. Multithreading has been<br>
implemented and is available via the _thread module, but this feature is<br>
disabled by default and must be enabled at compile time using the<br>
MICROPY_THREAD and MICROPY_THREAD_GIL options. The ability to skip booting<br>
from SD card is now available by creating an empty file on the flash called<br>
"SKIPSD".</p>
<p>The cc3200 port has had some backwards incompatible changes, in particular<br>
with I2C, Pin, UART and uos. Please see the documentation for the new<br>
behaviour.</p>
<p>The esp8266 port has had a change in the size of the firmware in order to<br>
accommodate additional features. As such the filesystem for this version<br>
is incompatible with v1.8.7 and a device requires backup and erasure before<br>
flashing this version. Soft IRQs are now implemented for Pin and Timer<br>
callbacks, along with the general improvements described above.</p>
<p>In the documentation there is now a section describing the differences<br>
between MicroPython and CPython. And code coverage is up to 98% across py/<br>
and extmod/.</p>
<p>Changes in code size (in bytes) between v1.8.7 and this version are:</p>
<p>bare-arm: -1104<br>
minimal: -1324<br>
unix x64: -1115<br>
unix nanbox: -11106<br>
stmhal: +18116<br>
cc3200: +1032<br>
esp8266: +3060</p>
<p>Note that stmhal has increased significantly due to the addition of frozen<br>
bytecode and the LCD160CR driver.</p>
<p>A detailed list of changes follows.</p>
<p>py core:</p>
<ul>
<li>builtinimport: raise ValueError for bad relative import, per CPython</li>
<li>builtinimport: remove unreachable code and change obj-import comment</li>
<li>runtime: refactor assert(0) to improve coverage</li>
<li>runtime: fix handling of throw() when resuming generator</li>
<li>objgenerator: when throwing an object, don't make an exc instance</li>
<li>objgenerator: don't raise RuntimeError if GeneratorExit ignored</li>
<li>parse: refactor code to remove assert(0)'s</li>
<li>emitnative: remove assert(0)'s or replace with mp_not_implemented</li>
<li>objexcept: replace if-cond and assert(0) with simple assert</li>
<li>runtime: refactor default case of switch to remove assert(0)</li>
<li>binary: mp_binary_get_size: Raise error on unsupported typecodes</li>
<li>formatfloat: remove unreachable code</li>
<li>objint_mpz: refactor switch-statement to remove unreachable default</li>
<li>mpz: implement mpz_set_from_bytes() as a foundation for int.from_bytes()</li>
<li>objint: from_bytes(): implement "byteorder" param and arbitrary precision</li>
<li>objint_longlong: add stub for mp_obj_int_from_bytes_impl()</li>
<li>add builtin help function to core, with default help msg</li>
<li>move weak-link map to objmodule.c, and expose module maps as public</li>
<li>builtinhelp: implement help('modules') to list available modules</li>
<li>objint: fix left-shift overflow in checking for large int</li>
<li>objmodule: move module init/deinit code into runtime functions</li>
<li>objstr: optimize string concatenation with empty string</li>
<li>showbc: make sure to set the const_table before printing bytecode</li>
<li>py.mk: add CFLAGS_MOD flag to set config file for FatFs</li>
<li>objstringio: allow to specify initial capacity by passing numeric argument</li>
<li>objset: make inplace binary operators actually modify the set</li>
<li>objfloat: raise ZeroDivisionError for 0 to negative power</li>
<li>objcomplex: correctly handle case of 0j to power of something</li>
<li>objset: fix inplace binary ops so frozensets are not modified</li>
<li>added optimised support for 3-argument calls to builtin.pow()</li>
<li>objstr: give correct behaviour when passing a dict to %-formatting</li>
<li>mpconfig.h: move PY_BUILTINS_POW3 config option to diff part of file</li>
<li>objstr: convert some instances of mp_uint_t to size_t</li>
<li>objcomplex: fix typo in ternary expression</li>
<li>asmxtensa.h: explicitly cast args to 32-bits so left-shift is legal</li>
<li>map: change mp_uint_t to size_t where appropriate</li>
<li>nlr: fix execstack builds for ARM</li>
<li>objtype: add <strong>delattr</strong>/<strong>setattr</strong> configured by MICROPY_PY_DELATTR_SETATTR</li>
<li>emitbc: produce correct line number info for large bytecode chunks</li>
<li>objtype: replace non-ASCII single-quote char with ASCII version</li>
<li>modthread: use system-provided mutexs for _thread locks</li>
<li>vm: add MICROPY_PY_THREAD_GIL_VM_DIVISOR option</li>
<li>runtime: convert mp_uint_t to size_t where appropriate</li>
<li>mpz: convert mp_uint_t to size_t where appropriate</li>
<li>mpz: remove obsolete declaration of mpz_as_str_size</li>
<li>mpz: change type of "base" args from mp_uint_t to unsigned int</li>
<li>persistentcode: replace mp_uint_t with size_t where appropriate</li>
<li>objtuple: convert mp_uint_t to size_t where appropriate</li>
<li>objlist: convert mp_uint_t to size_t where appropriate</li>
<li>objdict: convert mp_uint_t to size_t where appropriate</li>
<li>objset: convert mp_uint_t to size_t where appropriate</li>
<li>objstr: convert mp_uint_t to size_t (and use int) where appropriate</li>
<li>objarray: convert mp_uint_t to size_t where appropriate</li>
<li>objfun: convert mp_uint_t to size_t where appropriate</li>
<li>objclosure: convert mp_uint_t to size_t where appropriate</li>
<li>objexcept: convert mp_uint_t to size_t where appropriate</li>
<li>objint: convert mp_uint_t to size_t where appropriate</li>
<li>vm: convert mp_uint_t to size_t where appropriate</li>
<li>add iter_buf to getiter type method</li>
<li>allow bytecode/native to put iter_buf on stack for simple for loops</li>
<li>make FOR_ITER opcode pop 1+4 slots from the stack when finished</li>
<li>optimise storage of iterator so it takes only 4 slots on Py stack</li>
<li>remove unused "use_stack" argument from for_iter_end emit function</li>
<li>runtime: optimise case of identity iterator so it doesn't alloc RAM</li>
<li>compile: optimise list/dict/set comprehensions to use stack iter</li>
<li>de-optimise some uses of mp_getiter, so they don't use the C stack</li>
<li>grammar: group no-compile grammar rules together to shrink tables</li>
<li>lexer: don't generate string representation for period or ellipsis</li>
<li>persistentcode: bump .mpy version due to change in bytecode</li>
<li>lexer: simplify handling of indenting of very first token</li>
<li>lexer: move check for keyword to name-tokenising block</li>
<li>lexer: use strcmp to make keyword searching more efficient</li>
<li>lexer: simplify handling of line-continuation error</li>
<li>do adjacent str/bytes literal concatenation in lexer, not compiler</li>
<li>lexer: convert mp_uint_t to size_t where appropriate</li>
<li>grammar: remove unused rule</li>
<li>objlist: for list slice assignment, allow RHS to be a tuple or list</li>
<li>moduerrno: make uerrno.errorcode dict configurable</li>
<li>moduerrno: make list of errno codes configurable</li>
<li>parse: allow parser/compiler consts to be bignums</li>
<li>create str/bytes objects in the parser, not the compiler</li>
<li>parse: simplify handling of errors by raising them directly</li>
<li>runtime: mp_raise_msg(): Accept NULL argument for message</li>
<li>objarray: disallow slice-assignment to read-only memoryview</li>
<li>map: fix bugs with deletion of elements from OrderedDict</li>
<li>move locals/globals dicts to the thread-specific state</li>
<li>nlr.h: mark nlr_jump_fail as NORETURN</li>
<li>nlrxtensa: convert from assembler to C file with inline asm</li>
<li>nlrx64: convert from assembler to C file with inline asm</li>
<li>nlrx86: convert from assembler to C file with inline asm</li>
<li>py.mk: force nlr files to be compiled with -Os</li>
<li>modsys: use MP_SMALL_INT_MAX for sys.maxsize in case of LONGINT_IMPL_NONE</li>
<li>runtime.c: remove optimization of '*a,=b', it caused a bug</li>
<li>use mp_obj_get_array where sequence may be a tuple or a list</li>
<li>nlrx86: add workaround for Zephyr</li>
<li>nlrx64: fixes to support Mac OS</li>
<li>objint_longlong: implement mp_obj_int_from_bytes_impl()</li>
<li>allow lexer to raise exceptions during construction</li>
<li>objint: allow to print long-long ints without using the heap</li>
<li>emitnative: use assertions and mp_not_implemented correctly</li>
<li>emitnative: remove obsolete commented out code</li>
<li>mpprint: fix int formatting so "+" is printed for 0-valued integer</li>
<li>mkrules.mk: remove special check for "-B" in qstr auto generation</li>
<li>objstr: fix eager optimisation of str/bytes addition</li>
<li>reduce size of mp_code_state_t structure</li>
<li>provide mp_decode_uint_value to help optimise stack usage</li>
<li>objstr: use better msg in bad implicit str/bytes conversion exception</li>
<li>add micropython.schedule() function and associated runtime code</li>
<li>vm: don't release the GIL if the scheduler is locked</li>
<li>bc: provide better error message for an unexpected keyword argument</li>
<li>use size_t as len argument and return type of mp_get_index</li>
<li>sequence: convert mp_uint_t to size_t where appropriate</li>
<li>define and use MP_OBJ_ITER_BUF_NSLOTS to get size of stack iter buf</li>
<li>lexer: remove obsolete comment, since lexer can now raise exceptions</li>
<li>modmath: allow trunc/ceil/floor to return a big int if necessary</li>
<li>objint: handle special case of -0 when classifying fp as int</li>
<li>modbuiltins: for round() builtin use nearbyint instead of round</li>
<li>modbuiltins: allow round() to return a big int if necessary</li>
<li>objtype: use size_t where appropriate, instead of mp_uint_t or uint</li>
<li>objnamedtuple: use size_t where appropriate, instead of mp_uint_t</li>
<li>use mp_locals/mp_globals accessor funcs instead of MP_STATE_CTX</li>
<li>remove MP_STATE_CTX, use MP_STATE_THREAD instead (it's an alias)</li>
<li>objarray: use mp_obj_str_get_str instead of mp_obj_str_get_data</li>
<li>nlrx86: better check for Zephyr (requires 1.7)</li>
<li>obj: change mp_uint_t to size_t for mp_obj_get_array_fixed_n len arg</li>
<li>vm: fix VM opcode tracing to print correct stack pointer</li>
<li>compile: when compiling super(), handle closed-over self variable</li>
<li>objmap: convert mp_uint_t to size_t</li>
<li>use mp_raise_TypeError/mp_raise_ValueError helpers where possible</li>
<li>lexer: simplify and reduce code size for operator tokenising</li>
<li>compile: simplify syntax-error messages for illegal assignments</li>
<li>shorten a couple of error messages</li>
<li>compile: provide terse error message for invalid dict/set literals</li>
<li>convert mp_uint_t to size_t for tuple/list accessors</li>
<li>change mp_uint_t to size_t for mp_obj_str_get_data len arg</li>
<li>objzip: convert mp_uint_t to size_t</li>
<li>obj.h: make sequence grow more efficient and support overlapping</li>
<li>objstr: use MICROPY_FULL_CHECKS for range checking when constructing bytes</li>
<li>add very simple but correct hashing for float and complex numbers</li>
<li>objint: consolidate mp_obj_new_int_from_float to one implementation</li>
<li>raise a ValueError if range() step is zero</li>
<li>objtuple: add support for inplace add (same as normal add)</li>
<li>make sure that static emg-exc-buffer is aligned to size of mp_obj_t</li>
<li>runtime: when init'ing kbd intr exc, use tuple ptr instead of object</li>
<li>objint: extract small int value directly because type is known</li>
<li>objint: use unsigned arithmetic when formatting an integer</li>
<li>obj: clean up and add comments describing mp_obj_type_t struct</li>
<li>optimise types for common case where type has a single parent type</li>
<li>objfloat: add implementation of high-quality float hashing</li>
<li>nlrsetjmp: add check for failed NLR jump</li>
<li>gc: execute finaliser code in a protected environment</li>
<li>modmicropython: add micropython.kbd_intr() function</li>
<li>reduce str/repr precision of float numbers when floats are 30-bit</li>
<li>objtype: mp_obj_new_super doesn't need to be public, so inline it</li>
<li>compile: don't do unnecessary check if parse node is a struct</li>
<li>compile: extract parse-node kind at start of func for efficiency</li>
<li>compile: add COMP_RETURN_IF_EXPR option to enable return-if-else opt</li>
<li>compile: don't do unnecessary check if iter parse node is a struct</li>
<li>compile: refactor handling of special super() call</li>
<li>add LOAD_SUPER_METHOD bytecode to allow heap-free super meth calls</li>
<li>mpz: strip trailing zeros from mpz value when set from bytes</li>
<li>mpz: in mpn_sub, use existing function to remove trailing zeros</li>
<li>cleanup use of global DEBUG preprocessor definition</li>
<li>modio: implement uio.resource_stream(package, resource_path)</li>
<li>objint: in int.from_bytes, only create big-int if really needed</li>
<li>modio: resource_stream: Implement "package" param handling</li>
<li>binary: handle storing big-ints to all arrays types</li>
<li>lexer: simplify lexer startup by using dummy bytes and next_char()</li>
<li>mkrules.mk: add dependency of .mpy files upon mpy-cross</li>
<li>lexer: process CR earlier to allow newlines checks on chr1</li>
<li>modsys: update conditionals for code referencing sys.stdout</li>
<li>objstringio: fix StringIO reads at or beyond EOF</li>
<li>sequence: fix boundary errors when slicing with a negative step</li>
<li>objrange: fix slicing of range when step of slice is negative</li>
<li>mkenv.mk: use $(TOP) instead of ".." to reference tools, mpy-cross</li>
<li>vm: fix bug with stackless mode and unwinding of exceptions</li>
<li>vm: fix bug with unwind jump popping the iterator from a for loop</li>
<li>emitbc: fix bug with BC emitter computing Python stack size</li>
<li>mkrules.mk: fix auto-qstr generation when "make -B" is used</li>
<li>objstringio: catch mp_uint_t overflow of stream position in write()</li>
<li>move BYTES_PER_WORD definition from ports to py/mpconfig.h</li>
</ul>
<p>extmod:</p>
<ul>
<li>modframebuf: optimize fill_rect subroutine call</li>
<li>modframebuf: clip pixels drawn by line method</li>
<li>modframebuf: add GS4_HMSB format</li>
<li>vfs_fat: rework so it can optionally use OO version of FatFS</li>
<li>rename vfs_fat_file.h to vfs_fat.h</li>
<li>add generic VFS sub-system</li>
<li>vfs_fat: rework to support new generic VFS sub-system</li>
<li>vfs: add ability for VFS sub-system to import using VfsFat</li>
<li>modlwip: add socket.readinto() method</li>
<li>vfs: expose mp_vfs_mount_t type</li>
<li>vfs_fat: use SECSIZE macro to determine FatFs sector size</li>
<li>machine_signal: implement "Signal" abstraction for machine module</li>
<li>vfs_fat: update to use FF_DIR instead of DIR</li>
<li>vfs: expose lookup_path_raw as mp_vfs_lookup_path</li>
<li>vfs_fat: remove MICROPY_READER_FATFS component</li>
<li>vfs_fat: remove MICROPY_FSUSERMOUNT_ADHOC config option</li>
<li>remove MICROPY_FSUSERMOUNT and related files</li>
<li>vfs_fat: remove MICROPY_FATFS_OO config option</li>
<li>merge old fsusermount.h header into vfs.h and vfs_fat.h</li>
<li>vfs_fat: remove unused fatfs_builtin_open function</li>
<li>vfs_fat: remove unused function fat_vfs_listdir</li>
<li>vfs_reader: fix use of NLR by popping context</li>
<li>vfs_fat.c: use explicit include path for timeutils.h</li>
<li>machine_pulse: make time_pulse_us() not throw exceptions</li>
<li>machine_spi: remove EVENT_POLL_HOOK from soft-SPI transfer func</li>
<li>machine_signal: implement Signal .on() and .off() methods</li>
<li>vfs: allow to mount a block device, not just a VFS object</li>
<li>vfs: raise OSError(EEXIST) on attempt to mkdir a mount point</li>
<li>vfs: allow to stat the root directory</li>
<li>modlwip: add my copyright</li>
<li>modurandom: use mp_raise_ValueError()</li>
<li>modutimeq: make scheduling fair (round-robin)</li>
<li>modutimeq: add peektime() function (provisional)</li>
<li>vfs_fat: remove obsolete and unused str/len members</li>
<li>vfs_fat: allow to compile with MICROPY_VFS_FAT disabled</li>
<li>vfs: rewrite path lookup algo to support relative paths from root</li>
<li>modframebuf: add support for monochrome horizontal format</li>
<li>utime_mphal: don't exit/enter the GIL in generic sleep functions</li>
<li>modlwip: use mp_obj_str_get_str instead of mp_obj_str_get_data</li>
<li>vfs_fat: fix calculation of total blocks in statvfs</li>
<li>moduselect: update to use size_t for array accessor</li>
<li>update for changes to mp_obj_str_get_data</li>
<li>modframebuf: make monochrome bitmap formats start with MONO_</li>
<li>machine_signal: support all Pin's arguments to the constructor</li>
<li>machine_signal: rename "inverted" arg to "invert", it's shorter</li>
<li>moductypes: fix bigint handling for 32-bit ports</li>
<li>crypto-algorithms/sha256: remove non-standard memory.h header</li>
<li>moduselect: convert to MP_ROM_QSTR and friends</li>
<li>moduselect: refactor towards introduction of poll.ipoll()</li>
<li>moduselect: implement ipoll() method for alloc-free polling</li>
<li>modlwip: getaddrinfo: Allow to accept all 6 standard params</li>
<li>modlwip: ioctl POLL: Fix handling of peer closed socket</li>
<li>vfs: allow a VFS to be mounted at the root dir</li>
<li>vfs: implement mp_vfs_ilistdir()</li>
<li>vfs_fat: replace listdir() with implementation of ilistdir()</li>
<li>vfs: use MP_S_IFDIR, MP_S_IFREG consts instead of magic numbers</li>
<li>vfs_fat_misc: remove dot-dirs filter since FatFS already does it</li>
</ul>
<p>lib:</p>
<ul>
<li>utils: remove old pyhelp helper, replaced with py/builtinhelp.c</li>
<li>utils/pyexec: only print help prompt if HELP feature is enabled</li>
<li>oofatfs: add OO version of FatFS library</li>
<li>fatfs: remove old fatfs library component, it's replaced by oofatfs</li>
<li>oofatfs/ffconf.h: allow to configure FS_EXFAT option</li>
<li>oofatfs/ffconf.h: add MICROPY_FATFS_NORTC option</li>
<li>utils/pyexec: allow to compile when the uPy compiler is disabled</li>
<li>utils/pyexec: refactor to put lexer constructors all in one place</li>
<li>memzip: make lexer constructor raise exception when file not found</li>
<li>utils/pyexec: fix bug with pyexec_file not setting flag for source</li>
<li>libm: add implementation of nearbyintf, from musl-1.1.16</li>
<li>netutils: update for changes to mp_obj_str_get_data</li>
<li>utils/pyexec: update event-driven REPL to match non-event REPL</li>
</ul>
<p>drivers:</p>
<ul>
<li>fix some minor spelling mistakes</li>
<li>display: add driver and test for uPy LCD160CR display</li>
<li>memory: add SPI flash driver, written in C</li>
<li>display/lcd160cr: use correct variable in set_power()</li>
<li>display/lcd160cr: fix bugs with lcd.get_pixel()</li>
<li>display/lcd160cr: fix bug with save_to_flash method</li>
<li>display/lcd160cr: add check that JPEG size is less than 65536</li>
<li>nrf24l01: update to work on newer ports, using machine, utime</li>
<li>display/lcd160cr: fix get_line method and enhance screen_dump</li>
<li>display/lcd160cr_test: allow test to take orientation parameter</li>
<li>replace deprecated Pin.high()/low() methods with .<strong>call</strong>(1/0)</li>
</ul>
<p>tools:</p>
<ul>
<li>tinytest-codegen.py: blacklist heapalloc_str.py test for qemu-arm</li>
<li>upip: update to 1.1.5. Better and more user-friendly error handling</li>
<li>add gen-cpydiff.py to generate docs differences</li>
<li>gen-cpydiff.py: set the Python import path to find test modules</li>
<li>gen-cpydiff.py: configurable CPython and micropython executables</li>
<li>tinytest-codegen: update for recent test renaming ("intbig" suffix)</li>
<li>pyboard: tighten up Pyboard object closure on errors</li>
<li>pyboard: add "exec" and "execpty" pseudo-devices support</li>
<li>pyboard: execpty: Use shell=False to workaround some curdir issues</li>
<li>pyboard: processPtyToTerminal: Add workaround for PySerial bug</li>
<li>pyboard: provide more details when expected reply not received</li>
<li>mpy-tool: make work if run from another directory</li>
<li>upip: upgrade to 1.1.6, supports commented lines in requirements.txt</li>
<li>upip: upgrade to 1.2</li>
<li>mpy-tool.py: use MP_ROM_xxx macros to support nanbox builds</li>
<li>mpy_cross_all.py: helper tool to run mpy-cross on the entire project</li>
<li>mpy-tool.py: fix regression with freezing floats in obj repr C</li>
</ul>
<p>tests:</p>
<ul>
<li>add feature check for "const" keyword and skip related tests</li>
<li>update test suite to be compatible with CPython 3.6</li>
<li>improve stream.c test coverage</li>
<li>import: improve builtinimport.c test coverage</li>
<li>improve frozen import test coverage</li>
<li>update tests, and add new ones, for recent generator tweaks</li>
<li>io: improve test coverage of io.BufferedWriter</li>
<li>basics: improve runtime.c test coverage</li>
<li>extmod: improve test coverage of ure module</li>
<li>float: add test for assigning to attribute of complex number</li>
<li>extmod/framebuf1: add test for no-op fill_rect</li>
<li>micropython/opt_level: add test for opt_level 3</li>
<li>misc/non_compliant: add test for inability to assign func attrs</li>
<li>basics: add test for assignment of attribute to bound method</li>
<li>add test for int.from_bytes() for arbitrary-precision integer</li>
<li>heapalloc_int_from_bytes: test that int.from_bytes() can work w/o alloc</li>
<li>add test for builtin help function</li>
<li>basics/builtin_help: add test for help('modules')</li>
<li>make sure special tests can be skipped as well</li>
<li>extmod/framebuf4: add tests for GS4_HMSB framebuf format</li>
<li>extmod/framebuf1: fix test for framebuf invalid constructor</li>
<li>extmod: add test for ure debug printing when compiling a regex</li>
<li>heapalloc_str: test for alloc-free string operations</li>
<li>extmod: update vfs_fat tests for new OO FatFs library</li>
<li>extmod/vfs_fat: update tests to work with new VFS sub-system</li>
<li>extmod/vfs_fat_ramdisk: make it work on pyboard</li>
<li>run-tests: skip frozenset tests if set literal syntax is not available</li>
<li>basics/zip: make skippable</li>
<li>thread: make thread_exc2 runable on baremetal</li>
<li>thread: fix stack size test so tests run reliably on baremetal</li>
<li>heapalloc_bytesio: test for BytesIO with preallocates space</li>
<li>basics/set_binop: add tests for inplace set operations</li>
<li>float: add tests for zero to a negative power</li>
<li>split tests for 2- and 3-arg pow()</li>
<li>basics/string_format_modulo: add more tests for dict formatting</li>
<li>pyb: adjust tests so they can run on PYB and PYBLITE</li>
<li>misc: add test for line number printing with large bytecode chunk</li>
<li>add option to not clear MICROPYPATH when running tests</li>
<li>run-tests: allow to skip tests using async/await keywords</li>
<li>comprehension1, containment: split set tests to separate files</li>
<li>builtin_dir: the most expected thing in sys is exit, test for it</li>
<li>basic/[a-f]*: make skippable</li>
<li>dict_fromkeys: revert to use reversed() to run in native codegen mode</li>
<li>extmod: make tests skippable</li>
<li>thread: replace busy waiting loops with a loop that sleeps</li>
<li>thread: add stress-test for creating many threads</li>
<li>gen_yield_from_close: use range() instead of reversed()</li>
<li>basic/: make various tests skippable</li>
<li>cmdline: update tests to pass with latest changes to bytecode</li>
<li>cmdline/cmd_showbc: update to work with recent changes</li>
<li>micropython: add test for iterating with the heap locked</li>
<li>micropython/heapalloc_iter: add tests for contains and unpack</li>
<li>cmdline: update cmd_parsetree test for changes to grammar order</li>
<li>cmdline/cmd_parsetree: update to work with changes to grammar</li>
<li>basics/string_join: add more tests for string concatenation</li>
<li>heapalloc_exc_raise.py: heap alloc test for raising/catching exc</li>
<li>cpydiff: add initial set of tests for uPy-CPython differences</li>
<li>cpydiff: add a test for storing iterable to a list slice</li>
<li>micropython: add test for consts that are bignums</li>
<li>extmod: add test for machine.Signal class</li>
<li>basics: add further tests for OrderedDict</li>
<li>run-tests: check for big int availability and skip related tests</li>
<li>basic: split tests into working with small ints and not working</li>
<li>float/complex1: split out intbig test</li>
<li>float2int*: suffix with _intbig, don't run on any other int type</li>
<li>string_format_modulo2: split off intbig test</li>
<li>basics/string_join.py: add test case where argument is not iterable</li>
<li>basics/unpack1.py: test if *a, = b copies b when b is a list</li>
<li>micropython/: split off intbig tests</li>
<li>uctypes_array_assign_native_le: split off intbig part</li>
<li>basic: make various tests skippable</li>
<li>float: make various tests skippable</li>
<li>extmod: add very basic feature test for ussl module</li>
<li>extmod: add websocket tests</li>
<li>dict_fromkeys: split out skippable part</li>
<li>micropython: make uio-using tests skippable</li>
<li>micropython/heapalloc_traceback: fix backtrace line # after refactor</li>
<li>micropython/opt_level: clarify the expected output for opt_level == 3</li>
<li>feature_check/int_big: rework "big int" detection</li>
<li>basics/fun_error: split out skippable test</li>
<li>extmod: rename websocket test to websocket_basic</li>
<li>misc/: make few tests skippable</li>
<li>extmod: add a test for core VFS functionality, sans any filesystem</li>
<li>extmod/vfs_basic: add more tests for basic VFS functionality</li>
<li>extmod: improve re1.5/recursiveloop.c test coverage</li>
<li>improve binary.c test coverage</li>
<li>basics/struct_micropython: add test for 'S' typecode in ustruct</li>
<li>run-tests: re-instate skipping of doubleprec test on pyboard</li>
<li>extmod/vfs_basic: unmount all existing devices before doing test</li>
<li>extmod: improve tinfgzip.c test coverage</li>
<li>micropython/viper_error: add more tests to improve coverage</li>
<li>basics/string_format2: adjust comment now that tests succeed</li>
<li>basics: add test for string module formatting with int argument</li>
<li>basics: move string-modulo-format int tests to dedicated file</li>
<li>basics/bytes_add: add tests for optimised bytes addition</li>
<li>micropython: add tests for micropython.schedule()</li>
<li>heapalloc_str: test no-replacement case for str.replace()</li>
<li>float: add tests for math funcs that return ints</li>
<li>float: add tests for round() of inf, nan and large number</li>
<li>basics: add test for super() when self is closed over</li>
<li>basics: add tests for list and bytearray growing using themselves</li>
<li>run-tests: be sure to close Pyboard object on completion</li>
<li>vfs_fat_fileio.py is too big to be parsed in 16K heap, split in 2</li>
<li>extmod/vfs_fat_fileio*: improve skippability</li>
<li>float/byte*_construct: skip on missing array module</li>
<li>micropython/heapalloc_iter: improve skippability</li>
<li>run-tests: introduce generic "minimal" target</li>
<li>float: add tests for hashing float and complex numbers</li>
<li>run-tests: update names of tests that may need skipping</li>
<li>basics: add tests for raising ValueError when range() gets 0 step</li>
<li>basics: add test for tuple inplace add</li>
<li>extmod/utimeq1: improve coverage of utimeq module</li>
<li>run-tests: search feature checks wrt to main script location</li>
<li>run-tests: don't post-process CRASH result in any way</li>
<li>micropython: add test for micropython.kbd_intr()</li>
<li>add tests for calling super and loading a method directly</li>
<li>basics: add tests for int.from_bytes when src has trailing zeros</li>
<li>cpydiff/core_arguments: fill in cause/workaround</li>
<li>cpydiff/core_function_userattr: clarify, fill in cause and workaround</li>
<li>cpydiff/core_import_prereg: fill in cause and workaround</li>
<li>io/resource_stream: add test for uio.resource_stream()</li>
<li>cpydiff/core_import_path: test showing difference in package.<strong>path</strong></li>
<li>cpydiff/core_import_split_ns_pkgs: test for split namespace packages</li>
<li>cpydiff/core_function_unpacking: fill in workaround</li>
<li>extmod: add more tests for VFS FAT</li>
<li>extmod: add some more VFS tests</li>
<li>micropython: add test for int.from_bytes with many zero bytes</li>
<li>move super-as-local test from cpydiff to basic tests</li>
<li>basics: update array test for big-int with lL typecodes</li>
<li>basics: add memoryview test for big ints</li>
<li>basics/lexer: add lexer tests for input starting with newlines</li>
<li>extmod: make some vfs tests fully unmount FSs before running</li>
<li>extmod/vfs: update tests to reflect new ilistdir() method</li>
<li>basics/lexer: add line continuation tests for lexer</li>
<li>extmod/vfs_fat: add test for ilistdir of a non-existent directory</li>
<li>extmod/vfs_fat_more: make skippable is uos is not available</li>
<li>io/bytesio_ext: test read() after seek() past end of BytesIO object</li>
<li>basics/list_slice_3arg: add more tests for negative slicing</li>
<li>basics/builtin_range: add tests for negative slicing of range</li>
<li>basics: add more tests for unwind jumps from within a try-finally</li>
</ul>
<p>mpy-cross:</p>
<ul>
<li>main: move lexer constructor to within NLR handler block</li>
<li>fix compiler detection for including windows/fmode.c</li>
<li>Makefile: override undefine any inherited variables</li>
<li>Makefile: guard "override undefine" by test for make feature</li>
</ul>
<p>bare-arm port:</p>
<ul>
<li>main: move lexer constructor to within NLR handler block</li>
<li>Makefile: change C standard from gnu99 to c99</li>
</ul>
<p>minimal port:</p>
<ul>
<li>update frozentest.mpy file for new .mpy version</li>
<li>add ability and description to build without the compiler</li>
<li>main: move lexer constructor to within NLR handler block</li>
<li>Makefile: change C standard from gnu99 to c99</li>
<li>main: make Cortex-M vector table constant</li>
</ul>
<p>unix port:</p>
<ul>
<li>coverage: move coverage #if guard back to top of file</li>
<li>enable builtin help function in coverage build</li>
<li>enable MICROPY_PY_BUILTINS_HELP_MODULES in coverage build</li>
<li>switch to OO version of FatFS library</li>
<li>get minimal version compiling again</li>
<li>change to use new generic VFS sub-system in coverage build</li>
<li>fatfs_port: include new oofatfs header</li>
<li>mpconfigport.h: remove obsolete MICROPY_FATFS_VOLUMES config</li>
<li>modos: remove VfsFat from uos module, it's now in uos_vfs module</li>
<li>make stack be non-executable</li>
<li>fix freedos port build problems</li>
<li>main: properly handle MICROPYPATH starting with ':'</li>
<li>moduselect: implement ipoll() method with no-allocation policy</li>
<li>modmachine: add Signal class to machine module</li>
<li>remove remaining, obsolete traces of GNU readline support</li>
<li>moduselect: properly implement ipoll object iteration</li>
<li>main: refactor to put lexer constructors all in one place</li>
<li>use mp_handle_pending() in time.sleep()</li>
<li>coverage: enable scheduler and add tests for it</li>
<li>use mp_obj_str_get_str instead of mp_obj_str_get_data</li>
<li>convert mp_uint_t to size_t for use of mp_obj_list_get</li>
<li>convert mp_uint_t to size_t in alloc.c</li>
<li>enabled high-quality float hashing in coverage build</li>
<li>remove obsolete MICROPY_FATFS macro</li>
<li>main: ignore SIGPIPE signal, instead make EPIPE arrive</li>
<li>main: don't allow to specify too small heap size</li>
<li>main: implement -m option for packages</li>
<li>Makefile: enable frozen bytecode modules dir</li>
<li>move upip to frozen bytecode dir</li>
<li>Makefile: don't add frozen bytecode to minimal build</li>
<li>add ilistdir in uos module</li>
<li>use core-provided KeyboardInterrupt exception object</li>
</ul>
<p>windows port:</p>
<ul>
<li>.gitignore: ignore VC.db and VC.opendb files from VS2015</li>
<li>make msvc project file support any version from VS2013 to VS2017</li>
<li>bring mpconfigport.h up-to-date with unix port</li>
<li>README: convert to Markdown</li>
<li>README: fix some typos and grammar</li>
<li>README: add a note about stack usage for msvc</li>
<li>use core-provided KeyboardInterrupt exception object</li>
<li>msvc: add machine/pin-related sources to build</li>
<li>msvc: remove directory with generated files when cleaning</li>
<li>msvc: do not define DEBUG for debug builds</li>
<li>msvc: rebuild all qstrs when mpconfig headers are modified</li>
<li>msvc: workaround parser bug in older MSBuild versions</li>
</ul>
<p>qemu-arm port:</p>
<ul>
<li>don't compile tests in "REPL" mode</li>
<li>mpconfigport.h: enable MICROPY_PY_BUILTINS_POW3 option</li>
<li>enable machine module and associated tests</li>
<li>add basic uos module with generic VFS capabilities</li>
<li>move lexer constructors to within NLR handler block</li>
</ul>
<p>stmhal port:</p>
<ul>
<li>support PortG on STM32L476 and STM32L486</li>
<li>fix wrong usage of gcc -print-libgcc-file-name</li>
<li>fix USB HID receive not receiving the first packet</li>
<li>implement ioctl for USB HID read</li>
<li>implement SNAK/CNAK mechanism for USB HID receive</li>
<li>convert to use builtin help function</li>
<li>enable help('modules') feature</li>
<li>add default frozen-bytecode directory and link lcd160cr driver</li>
<li>fix examples in openocd configs to include addresses</li>
<li>add ability to have filesystem stored on external SPI flash</li>
<li>boards/STM32L476DISC: use external SPI flash for filesystem</li>
<li>mpconfigport.h: reorganise the config options into groups</li>
<li>usbd_msc_storage: use storage functions instead of disk ones</li>
<li>convert to use VFS sub-system and new ooFatFs component</li>
<li>fix name of automatically created boot.py</li>
<li>moduos: remove duplicated chdir</li>
<li>use LED constants from PYBv4 onwards</li>
<li>set the FatFs partition number when initialising VFS object</li>
<li>fix stack pointer initialisation for F411 and F429 boards</li>
<li>README: add paragraph about building mpy-cross</li>
<li>on boot, mount all available partitions of the SD card</li>
<li>main: put /sd directory before /flash in sys.path</li>
<li>pin: add C-level pin ioctl method</li>
<li>modmachine: add machine.Signal type</li>
<li>main: guard init_sdcard_fs with MICROPY_HW_HAS_SDCARD</li>
<li>pendsv: fill in comments about what the stack contains</li>
<li>initial implementation of multithreading, currently disabled</li>
<li>main: use _estack value to initialise stack extents</li>
<li>fix build issue when MICROPY_PY_THREAD is disabled</li>
<li>mpconfigport.h: enable MICROPY_PY_BUILTINS_POW3 option</li>
<li>on HardFault, print stack pointer and do a stack dump</li>
<li>add pyb.fault_debug() function, to control hard-fault behaviour</li>
<li>use MICROPY_EVENT_POLL_HOOK instead of __WFI where appropriate</li>
<li>add ability to skip booting from SD card via /flash/SKIPSD file</li>
<li>Makefile: drop use of -mabi=aapcs-linux; link libgcc by default</li>
<li>boards: for STM32F411DISC, change I2C pin according to datasheet</li>
<li>implement a proper thread scheduler</li>
<li>use generic interrupt char code</li>
<li>main: remove unnecessary header includes</li>
<li>use mp_hal_delay_ms instead of HAL_Delay</li>
<li>rename sys_tick ticks/delay functions to corresp. mp_hal ones</li>
<li>modpyb: use utime ticks ms/us functions instead of custom ones</li>
<li>modnwcc3k: add include for mp_hal_delay_ms</li>
<li>mphalport: get ticks_cpu() working on F7 MCUs</li>
<li>main: allocate flash's VFS struct on the heap to trace root ptrs</li>
<li>enable micropython.schedule()</li>
<li>pendsv: disable interrupts during a thread switch</li>
<li>irq: shift IRQ priorities of TIM and EXTINT to be above PENDSV</li>
<li>pybthread: allow interrupts to work during lock/unlock of mutex</li>
<li>systick: make mp_hal_delay_ms release the GIL when sleeping</li>
<li>boards: fix alt-func config for PA5 of STM32F767</li>
<li>board: fix existing and add more pin defs for NUCLEO_F767ZI</li>
<li>spi: clean and/or invalidate D-cache before SPI DMA transfers</li>
<li>hal: for F7 MCUs, expose DMA_CalcBaseAndBitshift function</li>
<li>dma: fix reinitialisation of DMA on F7 MCUs, following F4</li>
<li>update to use size_t for tuple/list accessors</li>
<li>update for changes to mp_obj_str_get_data</li>
<li>spi: increase SPI transfer timeout, proportional to num bytes</li>
<li>support SDMMC alternate functions in pin generation</li>
<li>sdcard: add support for SDMMC2 on F7 MCUs</li>
<li>boards: update F76x alternate function table to add SDMMC2</li>
<li>boards/STM32F769DISC: get SD card working by using SDMMC2</li>
<li>boards/STM32F769DISC: fix user switch pin, and document stlink</li>
<li>boards: remove F769 alt function table, it's same as for F767</li>
<li>dma: don't include SDMMC2 struct if SDMMC2 is not available</li>
<li>move L4/F7 I2C timing constants from mpconfigboard.h to i2c.c</li>
<li>i2c: clean the cache so that I2C DMA works on F7 MCUs</li>
<li>usbd_cdc_interface: increase in-endpoint timeout to 500ms</li>
<li>usbd_cdc_interface: change CDC RX to use a circular buffer</li>
<li>enable parsing of all Pin constructor args by machine.Signal</li>
<li>timer: clear interrupt flag before setting callback</li>
<li>convert all module and method tables to use MP_ROM macros</li>
<li>modmachine: add machine.UART class, linking to pyb.UART</li>
<li>modmachine: remove TODO comment that is now implemented</li>
<li>add machine.Pin on/off methods</li>
<li>add ilistdir in uos module</li>
</ul>
<p>cc3200 port:</p>
<ul>
<li>convert to use builtin help function</li>
<li>add implementations of mp_import_stat and builtin_open</li>
<li>modusocket: remove deprecated socket.error</li>
<li>convert to use new VFS sub-system and new ooFatFs library</li>
<li>refactor "ticks" functions to use common extmod implementation</li>
<li>move stoupper to ftp.c and define in terms of unichar_toupper</li>
<li>use simplelink API instead of emulated BSD API</li>
<li>remove util/std.h, can just use stdio.h instead</li>
<li>mods/modwlan: remove unused header includes; simplify others</li>
<li>mods/modwlan: make multi-threaded a proper compile-time option</li>
<li>mods/modwlan: allow antenna diversity to be fully compiled out</li>
<li>mods/modwlan: add int casts to silence compiler warnings</li>
<li>remove remaining references to std.h</li>
<li>move wlan socket glue functions from modwlan to modusocket</li>
<li>convert to using uPy internal errno numbers</li>
<li>when raising OSError's use MP_Exxx as arg instead of a string</li>
<li>enable uerrno module with short, custom list of error codes</li>
<li>mods/modusocket: init vars to 0 to silence compiler warnings</li>
<li>remove socket.timeout class, use OSError(ETIMEDOUT) instead</li>
<li>moduos: remove uos.sep, as it's strictly optional</li>
<li>mptask: allocate flash VFS struct on the heap to trace root ptrs</li>
<li>mods/modutime: use generic sleep_ms and sleep_us implementations</li>
<li>update to use size_t for tuple/list accessors</li>
<li>update for changes to mp_obj_str_get_data</li>
<li>mods/pybi2c: raise OSError if readfrom_mem fails to write addr</li>
<li>modmachine: return frequency value directly, like other ports</li>
<li>pybuart: make parity specifications consistent with HW API</li>
<li>mods/pybi2c: make machine.I2C constructor/init conform to HW API</li>
<li>mods/pybi2c: make readfnom_mem_into/writeto_mem return None</li>
<li>mods/pybpin: remove toggle() method</li>
</ul>
<p>teensy port:</p>
<ul>
<li>convert to use builtin help function</li>
<li>main: remove unnecessary header includes</li>
<li>lexerfrozen: make mp_lexer_new_from_file raise an exception</li>
</ul>
<p>esp8266 port:</p>
<ul>
<li>convert to use builtin help function</li>
<li>factor out common linker code to esp8266_common.ld</li>
<li>switch to use OO version of FatFs library</li>
<li>change to use new generic VFS sub-system</li>
<li>fatfs_port: include new oofatfs header</li>
<li>machine_pin: implement pin ioctl protocol</li>
<li>modmachine: add Signal class</li>
<li>mpconfigport.h: remove obsolete MICROPY_FATFS_VOLUMES config</li>
<li>uart: add support for polling uart device</li>
<li>moduos: populate release field of uname in case it was GC'd</li>
<li>mpconfigport.h: enable help('modules') feature</li>
<li>update lexer constructors so they can raise exceptions</li>
<li>only execute main.py if in friendly REPL mode</li>
<li>enable micropython.schedule() with locking in pin callback</li>
<li>change machine.Timer callback to soft callback</li>
<li>machine_pin: add "hard" parameter to pin.irq, soft by default</li>
<li>machine_pin: make pin.irq arguments positional</li>
<li>machine_pin: fix memset size for zeroing of pin_irq_is_hard</li>
<li>machine_pin: fix pin.irq() to work when all args are keywords</li>
<li>modesp: use mp_obj_str_get_str instead of mp_obj_str_get_data</li>
<li>modesp: remove long-obsolete and unused espconn bindings</li>
<li>update to use size_t for tuple/list accessors</li>
<li>update for changes to mp_obj_str_get_data</li>
<li>remove unused entry in port root pointers</li>
<li>README: replace reference of alpha status to beta status</li>
<li>README: add notice about 512K version</li>
<li>change default settings to mount flash at root dir</li>
<li>esp8266.ld, esp8266_ota.ld: grow main firmware size by 32KB</li>
<li>modesp: flash_user_start: Use value from linker script</li>
<li>modules/flashbdev: reserve one sector for native code storage</li>
<li>scripts: move drivers/modules to modules/ (frozen bytecode)</li>
<li>scripts: move initsetup & port_diag tools to modules/</li>
<li>ets_alt_task.c: prevent spurious large increment of ticks_ms()</li>
<li>modnetwork: in connect, fix potential buffer overflows</li>
<li>machine_uart: add uart.any() method</li>
<li>modules: mount filesystem at root when creating for first time</li>
<li>mpconfigport.h: remove duplicate link to lwip module</li>
<li>rename machine.Pin high/low methods to on/off</li>
<li>add ilistdir in uos module</li>
</ul>
<p>zephyr port:</p>
<ul>
<li>help: update n_args param type to size_t</li>
<li>remove deprecated .mdef file</li>
<li>add separate Zephyr config for "minimal" build</li>
<li>enable SLIP networking for the default build</li>
<li>convert to use builtin help function</li>
<li>make sure that correct Zephyr config is used for "minimal" build</li>
<li>allow to have per-board Zephyr config fragments</li>
<li>prj_frdm_k64f.conf: add, enable Ethernet support</li>
<li>Makefile.zephyr: support and default to networked (SLIP) QEMU</li>
<li>README: describe many gotchas of networked builds</li>
<li>enable IPv6 networking in addition to IPv4</li>
<li>add qemu_cortex_m3 config fragment</li>
<li>main: don't unconditionally dump stats on each GC</li>
<li>README: network startup issues with frdm_k64f resolved</li>
<li>modzephyr: add a module for Zephyr-specific things</li>
<li>modzephyr: fix typo in identifier</li>
<li>make sure that generated prj.conf is updated only on content changes</li>
<li>move "minimal" configuration building to a separate wrapper script</li>
<li>main: nlr_jump_fail: Fix noreturn warning</li>
<li>main: remove unused __fatal_error()</li>
<li>main: move lexer constructor to within NLR handler block</li>
<li>zephyr_getchar: use native k_sem instead of legacy nano_sem</li>
<li>prj_base.conf: disable legacy kernel compatibility</li>
<li>prj_base.conf: enable TCP (and UDP explicitly)</li>
<li>Makefile: rework to use modern, official build integration</li>
<li>Makefile: add workaround (fix?) for broken builds for DTS targets</li>
<li>fix NLR segfault in minimal build</li>
<li>modusocket: initial version of usocket module for Zephyr</li>
<li>integrate modusocket into build</li>
<li>modusocket: implement bind() and connect()</li>
<li>modusocket: implement send()</li>
<li>modusocket: implement recv() for UDP sockets</li>
<li>modusocket: implement recv() for TCP sockets</li>
<li>prj_base.conf: add config for net_buf logging</li>
<li>modusocket: be sure to use MP_OBJ_FROM_PTR</li>
<li>modusocket: factor out socket_new() function</li>
<li>zephyr_getchar: explicitly yield to other threads on char availability</li>
<li>Makefile: add "test" target, runs testsuite in QEMU</li>
<li>modusocket: factor out "extended k_fifo API"</li>
<li>modusocket: implement listen()</li>
<li>modusocket: socket_bind: Don't set recv callback on STREAM sockets</li>
<li>modusocket: implement accept()</li>
<li>mpconfigport.h: fix build if usocket module is disabled</li>
<li>modmachine: add Signal class</li>
<li>machine_pin: implement pin protocol for machine.Signal support</li>
<li>modusocket: call net_nbuf_print_frags() in recv callback if DEBUG > 1</li>
<li>modusocket: strip packet header right in the receive callback</li>
<li>modmachine: implement machine.reset()</li>
<li>main: configure IPv4 netmask and gateway to allow Internet access</li>
<li>add 96b_carbon configuration</li>
<li>modusocket: refactor send() into stream write() method</li>
<li>modusocket: enable stream write() method</li>
<li>modusocket: refactor recv() into stream read() method</li>
<li>modusocket: add read/readline/readinto stream methods</li>
<li>modusocket: sock_read: Check socket status only at the start of packet</li>
<li>modusocket: add dummy makefile() implementation</li>
<li>Makefile: add debugserver Zephyr target</li>
<li>mpconfigport.h: enable line number information for scripts</li>
<li>main: remove superfluous include</li>
<li>modusocket: add dummy setsockopt() implementation</li>
<li>modusocket: add SOL_SOCKET and SO_REUSEADDR constants</li>
<li>prj_qemu_x86.conf: bump RAM size to 320K</li>
<li>README: update to require Zephyr 1.8</li>
<li>modusocket: wrap pkt_get_info() call</li>
<li>modusocket: update for net_pkt refactor</li>
<li>modusocket: switch to net_pkt_append() returning length</li>
<li>modusocket: if there're no packets in recv_q, cancel waiter</li>
<li>modusocket: implement getaddrinfo()</li>
<li>modusocket: first step to switch to alternative FIFO processing</li>
<li>modusocket: get rid of cur_pkt object member</li>
<li>main: check default netif before applying operations to it</li>
<li>modusocket: getaddrinfo: Use RAISE_ERRNO for proper error decoding</li>
<li>modusocket: getaddrinfo: Raise OSError on resolution timeout, etc</li>
<li>modusocket: use DEBUG_PRINT macro name as other modules do</li>
<li>rename machine.Pin high/low methods to on/off</li>
<li>don't send more than MTU allows</li>
<li>modusocket: handle a case when recv_q is empty when EOF is signaled</li>
</ul>
<p>pic16bit port:</p>
<ul>
<li>main: make nlr_jump_fail never return</li>
<li>main: make mp_lexer_new_from_file raise an exception</li>
</ul>
<p>README:</p>
<ul>
<li>explicitly mention "await" support, and formatting for keywords</li>
<li>add link to docs.micropython.org</li>
<li>describe extmod/ dir</li>
<li>change Travis & Coveralls badges to not use link references</li>
</ul>
<p>travis:</p>
<ul>
<li>unconditionally run coveralls analysis, even if others failed</li>
<li>change an stmhal rule to build PYBV11 instead of default PYBV10</li>
</ul>
<p>gitattributes:</p>
<ul>
<li>add .mpy files to list of binary files</li>
<li>remove obsolete lines</li>
</ul>
<p>docs:</p>
<ul>
<li>fix some minor spelling mistakes</li>
<li>add documentation for lcd160cr module</li>
<li>pyboard/tutorial: add tutorial for LCD160CR</li>
<li>library/lcd160cr: fix set_brightness range, should be 0..31</li>
<li>machine.Timer: move WiPy adhoc parts to its documentation</li>
<li>machine: add explicit note on machine module level and scope</li>
<li>usocket: clarify exceptions used</li>
<li>usocket: elaborate "Constants" section</li>
<li>usocket: clarify description of various methods</li>
<li>usocket: dedent Methods section</li>
<li>uio: describe differences between uPy an CPy stream hierarchy</li>
<li>conf.py: add myself as a copyright holder on the docs</li>
<li>uio: typo fixes/lexical improvements</li>
<li>pyboard/tutorial/lcd160cr_skin: fix typo, get_touched->get_touch</li>
<li>for LCD160CR driver and tutorial, add link to positioning image</li>
<li>esp8266/tutorial: specify the baudrate in picocom example command</li>
<li>add M-logo as favicon</li>
<li>library/pyb.Pin: minor typo fix, B6 should be A0</li>
<li>library/machine: make separate TOC for WiPy vs non-WiPy</li>
<li>uos: remove mention of uos.sep</li>
<li>library/lcd160cr: mention the valid values for set_power() method</li>
<li>modify Makefile and indexes to generate cPy-differences pages</li>
<li>uhashlib: provide port-neutral description</li>
<li>Makefile: define and use PYTHON as the interpreter for CPYDIFF</li>
<li>machine: fix formatting of Constants section</li>
<li>library/lcd160cr: add note about supported JPEG format/encodings</li>
<li>library: add framebuf documentation</li>
<li>library/lcd160cr: add link to framebuf page</li>
<li>esp8266/tutorial: update since esptool 1.3 added Python 3 support</li>
<li>library/framebuf: fix typo in bit-width for MVLSB description</li>
<li>library/machine.I2C: fix scan() doc to match implementation</li>
<li>library/btree: add btree module docs</li>
<li>utime: de-conditionalize description of sleep_ms() and friends</li>
<li>uos: de-conditionalize statvfs() description</li>
<li>machine.SPI: remove outdated wipy chunk</li>
<li>machine.Pin: move wipy-specific details to its own docs</li>
<li>machine.Pin: move wipy-specific methods to its docs</li>
<li>esp8266/general: start explicit "Known Issues", mentioned RTC inaccuracy</li>
<li>library/builtins: int: Add notice on byteorder param for to/from_bytes</li>
<li>library/machine.UART: remove some conditionals</li>
<li>utime: deconditionalize description of sleep()</li>
<li>usocket: deconditionalize</li>
<li>uhashlib: deconditionalize</li>
<li>esp8266/tutorial/intro: reword section on flash size requirement</li>
<li>library/micropython: deconditionalize</li>
<li>library/uos: urandom: Generalize description</li>
<li>library/ussl: deconditionalize, wipy notes moved to its documentation</li>
<li>machine.UART: deconditionalize normal methods</li>
<li>machine: move machine.main() misnomer to wipy's known issues</li>
<li>library/machine: typo fix in machine_callbacks section</li>
<li>library/machine.UART: remove pyboard-specific section</li>
<li>wipy/quickref: update reference for change to I2C API</li>
<li>wipy/general: add section about specifics of I2C implementation</li>
<li>library/machine.I2C: deconditionalise all methods</li>
<li>library/machine.*: add cross-reference label to individual classes</li>
<li>esp8266/quickref: add links from quickref page to machine classes</li>
<li>library/machine.I2C: remove WiPy-specific return values</li>
<li>library/machine.SPI: fix formatting of bullet list to stop warning</li>
<li>library/uos: add description of uos.ilistdir() function</li>
<li>machine.Pin: there's no toggle() method in MicroPython hardware API</li>
<li>machine.Signal: add initial draft description of Signal class</li>
<li>library/index: add important summary of the intro section as warning</li>
<li>change single occurrence of "Micropython" to "MicroPython"</li>
<li>library/micropython: document the newer micropython functions</li>
<li>library/machine.UART: update and improve uart.any() docs</li>
<li>library/machine.Pin: remove .id() method and .board class attr</li>
</ul>
<p>examples:</p>
<ul>
<li>hwapi: use Signal for inverted LED on ESP-12</li>
<li>hwapi: consistently use Signal class to define LEDs</li>
<li>button_reaction: update for time_pulse_us() no longer raising exc</li>
<li>hwapi: add hwconfig_pyboard.py for pyboard</li>
<li>hwapi: be sure to import Signal when it's used</li>
<li>hwapi/soft_pwm: use Signal on()/off() methods</li>
<li>embedding/README: convert to markdown, grammar and clarity fixes</li>
<li>embedding: place lexer constructor within NLR handler block</li>
<li>hwapi: add config for Zephyr port of 96Boards Carbon</li>
<li>hwapi/hwconfig*: use inline Signal() args where possible</li>
<li>hwapi/soft_pwm2_uasyncio: update for call_later_ms()</li>
</ul>dpgeorgetag:github.com,2008:Repository/247252679/v1.8.72017-01-08T12:53:14Zv1.8.7: Support for Xtensa emitter and assembler, and upgraded F4 and F7 STM HAL<p>This release adds support for the Xtensa architecture as a target for the<br>
native emitter, as well as Xtensa inline assembler. The int.from_bytes<br>
and int.to_bytes methods now require a second argument (the byte order)<br>
per CPython (only "little" is supported at this time). The "readall"<br>
method has been removed from all stream classes that used it; "read" with<br>
no arguments should be used instead. There is now support for importing<br>
packages from compiled .mpy files. Test coverage is increased to 96%.</p>
<p>The generic I2C driver has improvements: configurable clock stretching<br>
timeout, "stop" argument added to readfrom/writeto methods, "nack"<br>
argument added to readinto, and write[to] now returns num of ACKs<br>
received. The framebuf module now handles 16-bit depth (generic colour<br>
format) and has hline, vline, rect, line methods. A new utimeq module is<br>
added for efficient queue ordering defined by modulo time (to be<br>
compatible with time.ticks_xxx functions). The pyboard.py script has been<br>
modified so that the target board is not reset between scripts or commands<br>
that are given on a single command line.</p>
<p>For the stmhal port the STM Cube HAL has been upgraded: Cube F4 HAL to<br>
v1.13.1 (CMSIS 2.5.1, HAL v1.5.2) and Cube F7 HAL to v1.1.2. There is a<br>
more robust pyb.I2C implementation (DMA is now disabled by default, can be<br>
enabled via an option), and there is an implementation of machine.I2C with<br>
robust error handling and hardware acceleration on F4 MCUs. It is now<br>
recommended to use machine.I2C instead of pyb.I2C. The UART class is now<br>
more robust with better handling of errors/timeouts. There is also more<br>
accurate VBAT and VREFINT measurements for the ADC. New boards that are<br>
supported include: NUCLEO_F767ZI, STM32F769DISC and NUCLEO_L476RG.</p>
<p>For the esp8266 port select/poll is now supported for sockets using the<br>
uselect module. There is support for native and viper emitters, as well<br>
as an inline assembler (with limited iRAM for storage of native functions,<br>
or the option to store code to flash). There is improved software I2C<br>
with a slight API change: scl/sda pins can be specified as positional only<br>
when "-1" is passed as the first argument to indicate the use of software<br>
I2C. It is recommended to use keyword arguments for scl/sda. There is<br>
very early support for over-the-air (OTA) updates using the yaota8266<br>
project.</p>
<p>A detailed list of changes follows.</p>
<p>py core:</p>
<ul>
<li>emitnative: fix native import emitter when in viper mode</li>
<li>remove readall() method, which is equivalent to read() w/o args</li>
<li>objexcept: allow clearing traceback with 'exc.<strong>traceback</strong> = None'</li>
<li>runtime: mp_resume: handle exceptions in Python <strong>next</strong>()</li>
<li>mkrules.mk: rework find command so it works on OSX</li>
<li>*.mk: replace uses of 'sed' with $(SED)</li>
<li>parse: move function to check for const parse node to parse.[ch]</li>
<li>parse: make mp_parse_node_new_leaf an inline function</li>
<li>parse: add code to fold logical constants in or/and/not operations</li>
<li>factor persistent code load/save funcs into persistentcode.[ch]</li>
<li>factor out persistent-code reader into separate files</li>
<li>lexer: rewrite mp_lexer_new_from_str_len in terms of mp_reader_mem</li>
<li>lexer: provide generic mp_lexer_new_from_file based on mp_reader</li>
<li>lexer: rewrite mp_lexer_new_from_fd in terms of mp_reader</li>
<li>lexer: make lexer use an mp_reader as its source</li>
<li>objtype: implement <strong>call</strong> handling for an instance w/o heap alloc</li>
<li>factor out common code from assemblers into asmbase.[ch]</li>
<li>stream: move ad-hoc ioctl constants to stream.h and rename them</li>
<li>compile: simplify configuration of native emitter</li>
<li>emit.h: remove long-obsolete declarations for cpython emitter</li>
<li>move arch-specific assembler macros from emitnative to asmXXX.h</li>
<li>asmbase: add MP_PLAT_COMMIT_EXEC option for handling exec code</li>
<li>asmxtensa: add low-level Xtensa assembler</li>
<li>integrate Xtensa assembler into native emitter</li>
<li>allow inline-assembler emitter to be generic</li>
<li>add inline Xtensa assembler</li>
<li>emitinline: embed entire asm struct instead of a pointer to it</li>
<li>emitinline: move inline-asm align and data methods to compiler</li>
<li>emitinline: move common code for end of final pass to compiler</li>
<li>asm: remove need for dummy_data when doing initial assembler passes</li>
<li>objint: from_bytes, to_bytes: require byteorder arg, require "little"</li>
<li>binary: do zero extension when storing a value larger than word size</li>
<li>builtinimport: support importing packages from compiled .mpy files</li>
<li>mpz: remove unreachable code in mpn_or_neg functions</li>
<li>runtime: zero out fs_user_mount array in mp_init</li>
<li>mpconfig.h: enable MICROPY_PY_SYS_EXIT by default</li>
<li>add MICROPY_KBD_EXCEPTION config option to provide mp_kbd_exception</li>
<li>compile: add an extra pass for Xtensa inline assembler</li>
<li>modbuiltins: remove unreachable code</li>
<li>objint: rename mp_obj_int_as_float to mp_obj_int_as_float_impl</li>
<li>emitglue: refactor to remove assert(0), to improve coverage</li>
<li>lexer: remove unreachable code in string tokeniser</li>
<li>lexer: remove unnecessary check for EOF in lexer's next_char func</li>
<li>lexer: permanently disable the mp_lexer_show_token function</li>
<li>parsenum: simplify and generalise decoding of digit values</li>
<li>mpz: fix assertion in mpz_set_from_str which checks value of base</li>
<li>mpprint: add assertion for, and comment about, valid base values</li>
<li>objint: simplify mp_int_format_size and remove unreachable code</li>
<li>unicode: comment-out unused function unichar_isprint</li>
<li>consistently update signatures of .make_new and .call methods</li>
<li>mkrules.mk: add MPY_CROSS_FLAGS option to pass flags to mpy-cross</li>
<li>builtinimport: fix bug when importing names from frozen packages</li>
</ul>
<p>extmod:</p>
<ul>
<li>machine_i2c: make the clock stretching timeout configurable</li>
<li>machine_i2c: raise an error when clock stretching times out</li>
<li>machine_i2c: release SDA on bus error</li>
<li>machine_i2c: add a C-level I2C-protocol, refactoring soft I2C</li>
<li>machine_i2c: add argument to C funcs to control stop generation</li>
<li>machine_i2c: rewrite i2c.scan in terms of C-level protocol</li>
<li>machine_i2c: rewrite mem xfer funcs in terms of C-level protocol</li>
<li>machine_i2c: remove unneeded i2c_write_mem/i2c_read_mem funcs</li>
<li>machine_i2c: make C-level functions return -errno on I2C error</li>
<li>machine_i2c: add 'nack' argument to i2c.readinto</li>
<li>machine_i2c: make i2c.write[to] methods return num of ACKs recvd</li>
<li>machine_i2c: add 'stop' argument to i2c readfrom/writeto meths</li>
<li>machine_i2c: remove trivial function wrappers</li>
<li>machine_i2c: expose soft I2C obj and readfrom/writeto funcs</li>
<li>machine_i2c: add hook to constructor to call port-specific code</li>
<li>modurandom: allow to build with float disabled</li>
<li>modframebuf: make FrameBuffer handle 16bit depth</li>
<li>modframebuf: add back legacy FrameBuffer1 "class"</li>
<li>modframebuf: optimise fill and fill_rect methods</li>
<li>vfs_fat: implement POSIX behaviour of rename, allow to overwrite</li>
<li>moduselect: use stream helper function instead of ad-hoc code</li>
<li>moduselect: use configurable EVENT_POLL_HOOK instead of WFI</li>
<li>modlwip: add ioctl method to socket, with poll implementation</li>
<li>vfs_fat_file: allow file obj to respond to ioctl flush request</li>
<li>modbtree: add method to sync the database</li>
<li>modbtree: rename "sync" method to "flush" for consistency</li>
<li>modframebuf: add hline, vline, rect and line methods</li>
<li>machine_spi: provide reusable software SPI class</li>
<li>modframebuf: make framebuf implement the buffer protocol</li>
<li>modframebuf: store underlying buffer object to prevent GC free</li>
<li>modutimeq: copy of current moduheapq with timeq support for refactoring</li>
<li>modutimeq: refactor into optimized class</li>
<li>modutimeq: make time_less_than be actually "less than", not less/eq</li>
</ul>
<p>lib:</p>
<ul>
<li>utils/interrupt_char: use core-provided mp_kbd_exception if enabled</li>
</ul>
<p>drivers:</p>
<ul>
<li>display/ssd1306.py: update to use FrameBuffer not FrameBuffer1</li>
<li>onewire: enable pull up on data pin</li>
<li>onewire/ds18x20: fix negative temperature calc for DS18B20</li>
</ul>
<p>tools:</p>
<ul>
<li>tinytest-codegen: blacklist recently added uheapq_timeq test (qemu-arm)</li>
<li>pyboard.py: refactor so target is not reset between scripts/cmd</li>
<li>mpy-tool.py: add support for OPT_CACHE_MAP_LOOKUP_IN_BYTECODE</li>
</ul>
<p>tests:</p>
<ul>
<li>micropython: add test for import from within viper function</li>
<li>use read() instead of readall()</li>
<li>basics: add test for logical constant folding</li>
<li>micropython: add test for creating traceback without allocation</li>
<li>micropython: move alloc-less traceback test to separate test file</li>
<li>extmod: improve ujson coverage</li>
<li>basics: improve user class coverage</li>
<li>basics: add test for dict.fromkeys where arg is a generator</li>
<li>basics: add tests for if-expressions</li>
<li>basics: change dict_fromkeys test so it doesn't use generators</li>
<li>basics: enable tests for list slice getting with 3rd arg</li>
<li>extmod/vfs_fat_fileio: add test for constructor of FileIO type</li>
<li>extmod/btree1: exercise btree.flush()</li>
<li>extmod/framebuf1: add basics tests for hline, vline, rect, line</li>
<li>update for required byteorder arg for int.from_bytes()/to_bytes()</li>
<li>extmod: improve moductypes test coverage</li>
<li>extmod: improve modframebuf test coverage</li>
<li>micropython: get heapalloc_traceback test running on baremetal</li>
<li>struct*: make skippable</li>
<li>basics: improve mpz test coverage</li>
<li>float/builtin_float_round: test round() with second arg</li>
<li>basics/builtin_dir: add test for dir() of a type</li>
<li>basics: add test for builtin locals()</li>
<li>basics/set_pop: improve coverage of set functions</li>
<li>run-tests: for REPL tests make sure the REPL is exited at the end</li>
<li>basics: improve test coverage for generators</li>
<li>import: add a test which uses ... in from-import statement</li>
<li>add tests to improve coverage of runtime.c</li>
<li>add tests to improve coverage of objarray.c</li>
<li>extmod: add test for utimeq module</li>
<li>basics/lexer: add a test for newline-escaping within a string</li>
<li>add a coverage test for printing the parse-tree</li>
<li>utimeq_stable: test for partial stability of utimeq queuing</li>
<li>heapalloc_inst_call: test for no alloc for simple object calls</li>
<li>basics: add tests for parsing of ints with base 36</li>
<li>basics: add tests to improve coverage of binary.c</li>
<li>micropython: add test for micropython.stack_use() function</li>
<li>extmod: improve ubinascii.c test coverage</li>
<li>thread: improve modthread.c test coverage</li>
<li>cmdline: improve repl.c autocomplete test coverage</li>
<li>unix: improve runtime_utils.c test coverage</li>
<li>pyb/uart: update test to match recent change to UART timeout_char</li>
<li>run-tests: allow to skip set tests</li>
<li>improve warning.c test coverage</li>
<li>float: improve formatfloat.c test coverage using Python</li>
<li>unix: improve formatfloat.c test coverage using C</li>
<li>unix/extra_coverage: add basic tests to import frozen str and mpy</li>
<li>types1: split out set type test to set_types</li>
<li>array: allow to skip test if "array" is unavailable</li>
<li>unix/extra_coverage: add tests for importing frozen packages</li>
</ul>
<p>unix port:</p>
<ul>
<li>rename define for unix moduselect to MICROPY_PY_USELECT_POSIX</li>
<li>Makefile: update freedos target for change of USELECT config name</li>
<li>enable utimeq module</li>
<li>main: allow to print the parse tree in coverage build</li>
<li>Makefile: make "coverage_test" target mirror Travis test actions</li>
<li>moduselect: if file object passed to .register(), return it in .poll()</li>
<li>Makefile: split long line for coverage target, easier to modify</li>
<li>enable and add basic frozen str and frozen mpy in coverage build</li>
<li>Makefile: allow cache-map-lookup optimisation with frozen bytecode</li>
</ul>
<p>windows port:</p>
<ul>
<li>enable READER_POSIX to get access to lexer_new_from_file</li>
</ul>
<p>stmhal port:</p>
<ul>
<li>dma: de-init the DMA peripheral properly before initialising</li>
<li>i2c: add option to I2C to enable/disable use of DMA transfers</li>
<li>i2c: reset the I2C peripheral if there was an error on the bus</li>
<li>rename mp_hal_pin_set_af to _config_alt, to simplify alt config</li>
<li>upgrade to STM32CubeF4 v1.13.0 - CMSIS/Device 2.5.1</li>
<li>upgrade to STM32CubeF4 v1.13.0 - HAL v1.5.1</li>
<li>apply STM32CubeF4 v1.13.1 patch - upgrade HAL driver to v1.5.2</li>
<li>hal/i2c: reapply HAL commit ea040a4 for f4</li>
<li>hal/sd: reapply HAL commit <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/PaulCampbell/micropython-with-esp32-cam/commit/1d7fb82f0aec11331635532583617d773888b991/hovercard" href="https://github.com/PaulCampbell/micropython-with-esp32-cam/commit/1d7fb82f0aec11331635532583617d773888b991"><tt>1d7fb82</tt></a> for f4</li>
<li>hal: reapply HAL commit <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/PaulCampbell/micropython-with-esp32-cam/commit/9db719bb57626d72ab84ab0ccd2294bf89158762/hovercard" href="https://github.com/PaulCampbell/micropython-with-esp32-cam/commit/9db719bb57626d72ab84ab0ccd2294bf89158762"><tt>9db719b</tt></a> for f4</li>
<li>hal/rcc: reapply HAL commit <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/PaulCampbell/micropython-with-esp32-cam/commit/c568a2b44387bee14ea5f427a6e9b736eb1b5345/hovercard" href="https://github.com/PaulCampbell/micropython-with-esp32-cam/commit/c568a2b44387bee14ea5f427a6e9b736eb1b5345"><tt>c568a2b</tt></a> for f4</li>
<li>hal/sd: reapply HAL commit <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/PaulCampbell/micropython-with-esp32-cam/commit/09de030651b95956eb9f899e850f24d0ce804460/hovercard" href="https://github.com/PaulCampbell/micropython-with-esp32-cam/commit/09de030651b95956eb9f899e850f24d0ce804460"><tt>09de030</tt></a> for f4</li>
<li>boards: configure all F4 boards to work with new HAL</li>
<li>make-stmconst.py: fix regex's to work with current CMSIS</li>
<li>i2c: handle I2C IRQs</li>
<li>dma: precalculate register base and bitshift on handle init</li>
<li>dma: mark DMA sate as READY even if HAL_DMA_Init is skipped</li>
<li>can: clear FIFO flags in IRQ handler</li>
<li>i2c: provide custom IRQ handlers</li>
<li>hal: do not include <stdio.h> in HAL headers</li>
<li>mphalport.h: use single GPIOx->BSRR register</li>
<li>make-stmconst.py: add support for files with invalid utf8 bytes</li>
<li>update HALCOMMITS due to change to hal</li>
<li>make-stmconst.py: restore Python 2 compatibility</li>
<li>update HALCOMMITS due to change to hal</li>
<li>moduselect: move to extmod/ for reuse by other ports</li>
<li>i2c: use the HAL's I2C IRQ handler for F7 and L4 MCUs</li>
<li>updates to get F411 MCUs compiling with latest ST HAL</li>
<li>i2c: remove use of legacy I2C_NOSTRETCH_DISABLED option</li>
<li>add beginnings of port-specific machine.I2C implementation</li>
<li>i2c: add support for I2C4 hardware block on F7 MCUs</li>
<li>i2c: expose the pyb_i2c_obj_t struct and some relevant functions</li>
<li>machine_i2c: provide HW implementation of I2C peripherals for F4</li>
<li>add support for flash storage on STM32F415</li>
<li>add back GPIO_BSRRL and GPIO_BSRRH constants to stm module</li>
<li>add OpenOCD configuration for STM32L4</li>
<li>add address parameters to openocd config files</li>
<li>adc: add "mask" selection parameter to pyb.ADCAll constructor</li>
<li>adc: provide more accurate measure of VBAT and VREFINT</li>
<li>adc: make ADCAll.read_core_temp return accurate float value</li>
<li>adc: add ADCAll.read_vref method, returning "3.3v" value</li>
<li>adc: add support for F767 MCU</li>
<li>adc: make channel "16" always map to the temperature sensor</li>
<li>sdcard: clean/invalidate cache before DMA transfers with SD card</li>
<li>moduos: implement POSIX behaviour of rename, allow to overwrite</li>
<li>adc: use constants from new HAL version</li>
<li>refactor UART configuration to use pin objects</li>
<li>uart: add support for UART7 and UART8 on F7 MCUs</li>
<li>uart: add check that UART id is valid for the given board</li>
<li>cmsis: update STM32F7 CMSIS device include files to V1.1.2</li>
<li>hal: update ST32CubeF7 HAL files to V1.1.2</li>
<li>port of f4 hal commit <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/PaulCampbell/micropython-with-esp32-cam/commit/c568a2b44387bee14ea5f427a6e9b736eb1b5345/hovercard" href="https://github.com/PaulCampbell/micropython-with-esp32-cam/commit/c568a2b44387bee14ea5f427a6e9b736eb1b5345"><tt>c568a2b</tt></a> to updated f7 hal</li>
<li>port of f4 hal commit <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/PaulCampbell/micropython-with-esp32-cam/commit/09de030651b95956eb9f899e850f24d0ce804460/hovercard" href="https://github.com/PaulCampbell/micropython-with-esp32-cam/commit/09de030651b95956eb9f899e850f24d0ce804460"><tt>09de030</tt></a> to updated f7 hal</li>
<li>port of f4 hal commit <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/PaulCampbell/micropython-with-esp32-cam/commit/1d7fb82f0aec11331635532583617d773888b991/hovercard" href="https://github.com/PaulCampbell/micropython-with-esp32-cam/commit/1d7fb82f0aec11331635532583617d773888b991"><tt>1d7fb82</tt></a> to updated f7 hal</li>
<li>declare and initialise PrescTables for F7 MCUs</li>
<li>boards/STM32F7DISC: define LSE_STARTUP_TIMEOUT</li>
<li>hal: update HALCOMMITS due to change in f7 hal files</li>
<li>refactor to use extmod implementation of software SPI class</li>
<li>cmsis: add CMSIS file stm32f767xx.h, V1.1.2</li>
<li>add NUCLEO_F767ZI board, with openocd config for stm32f7</li>
<li>cmsis: add CMSIS file stm32f769xx.h, V1.1.2</li>
<li>add STM32F769DISC board files</li>
<li>move PY_SYS_PLATFORM config from board to general config file</li>
<li>mpconfigport: add weak-module links for io, collections, random</li>
<li>rename mp_const_vcp_interrupt to mp_kbd_exception</li>
<li>usb: always use the mp_kbd_exception object for VCP interrupt</li>
<li>use core-provided keyboard exception object</li>
<li>led: properly initialise timer handle to zero before using it</li>
<li>mphalport.h: explicitly use HAL's GPIO constants for pull modes</li>
<li>usrsw: use mp_hal_pin_config function instead of HAL_GPIO_Init</li>
<li>led: use mp_hal_pin_config function instead of HAL_GPIO_Init</li>
<li>sdcard: use mp_hal_pin_config function instead of HAL_GPIO_Init</li>
<li>add support for STM32 Nucleo64 L476RG</li>
<li>uart: provide a custom function to transmit over UART</li>
<li>uart: increase inter-character timeout by 1ms</li>
<li>enable utimeq module</li>
</ul>
<p>cc3200 port:</p>
<ul>
<li>tools/smoke.py: change readall() to read()</li>
<li>pybspi: remove static mode=SPI.MASTER parameter for latest HW API</li>
<li>mods/pybspi: remove SPI.MASTER constant, it's no longer needed</li>
<li>update for moduselect moved to extmod/</li>
<li>re-add support for UART REPL (MICROPY_STDIO_UART setting)</li>
<li>enable UART REPL by default</li>
<li>README: (re)add information about accessing REPL on serial</li>
<li>make: rename "deploy" target to "deploy-ota"</li>
<li>add targets to erase flash, deploy firmware using cc3200tool</li>
<li>README: reorganize and update to the current state of affairs</li>
<li>modwlan: add network.WLAN.print_ver() diagnostic function</li>
</ul>
<p>esp8266 port:</p>
<ul>
<li>enable uselect module</li>
<li>move websocket_helper.py from scripts to modules for frozen BC</li>
<li>refactor to use extmod implementation of software SPI class</li>
<li>mpconfigport_512k: disable framebuf module for 512k build</li>
<li>enable native emitter for Xtensa arch</li>
<li>enable inline Xtensa assembler</li>
<li>add "ota" target to produce firmware binary for use with yaota8266</li>
<li>use core-provided keyboard exception object</li>
<li>add "erase" target to Makefile, to erase entire flash</li>
<li>when doing GC be sure to trace the memory holding native code</li>
<li>modesp: flash_user_start(): support configuration with yaota8266</li>
<li>force relinking OTA firmware image if built after normal one</li>
<li>scripts/inisetup: dump FS starting sector/size on error</li>
<li>Makefile: produce OTA firmware as firmware-ota.bin</li>
<li>modesp: make check_fw() work with OTA firmware</li>
<li>enable utimeq module</li>
<li>Makefile: put firmware-ota.bin in build/, for consistency</li>
<li>modules/flashbdev: add RESERVED_SECS before the filesystem</li>
<li>modules/flashbdev: remove code to patch bootloader flash size</li>
<li>modules/flashbdev: remove now-unused function set_bl_flash_size</li>
<li>modules/flashbdev: change RESERVED_SECS to 0</li>
</ul>
<p>zephyr port:</p>
<ul>
<li>add .gitignore to ignore Zephyr's "outdir" directory</li>
<li>zephyr_getchar: update to Zephyr 1.6 unified kernel API</li>
<li>switch to Zephyr 1.6 unified kernel API</li>
<li>support raw REPL</li>
<li>implement soft reset feature</li>
<li>main: initialize sys.path and sys.argv</li>
<li>use core-provided keyboard exception object</li>
<li>uart_core: access console UART directly instead of printk() hack</li>
<li>enable slice subscription</li>
</ul>
<p>docs:</p>
<ul>
<li>remove references to readall() and update stream read() docs</li>
<li>library/index: elaborate on u-modules</li>
<li>library/machine.I2C: refine definitions of I2C methods</li>
<li>library/pyb.Accel: add hardware note about pins used by accel</li>
<li>library/pyb.UART: added clarification about timeouts</li>
<li>library/pyb.UART: moved writechar doc to sit with other writes</li>
<li>esp8266/tutorial: update intro to add Getting the firmware section</li>
<li>library/machine.I2C: fix I2C constructor docs to match impl</li>
<li>esp8266/tutorial: close socket after reading page content</li>
<li>esp8266/general: add "Scarcity of runtime resources" section</li>
<li>library/esp: document esp.set_native_code_location() function</li>
<li>library/esp: remove para and add further warning about flash</li>
<li>usocket: clarify that socket timeout raises OSError exception</li>
</ul>
<p>travis:</p>
<ul>
<li>build STM32 F7 and L4 boards under Travis CI</li>
<li>include persistent bytecode with floats in coverage tests</li>
</ul>
<p>examples:</p>
<ul>
<li>hwapi: button_led: Add GPIO pin read example</li>
<li>hwapi: add soft_pwm example converted to uasyncio</li>
<li>http_client: use read() instead of readall()</li>
<li>hwapi: add uasyncio example of fading 2 LEDs in parallel</li>
<li>hwapi: add example for machine.time_pulse_us()</li>
<li>hwapi: add hwconfig for console tracing of LED operations</li>
<li>accellog.py: change 1: to /sd/, and update comment about FS</li>
<li>hwapi/hwconfig_console: don't alloc memory in value()</li>
</ul>dpgeorgetag:github.com,2008:Repository/247252679/v1.8.62016-11-10T10:25:01Zv1.8.6: ESP8266 port uses SDK 2.0, has more heap, has support for 512k devices<p>This release brings some code size reductions to the core as well as<br>
more tests and improved coverage which is now at 94.3%.</p>
<p>The time.ticks_diff(a, b) function has changed: the order of the arguments<br>
has been swapped so that it behaves like "a - b", and it can now return a<br>
negative number if "a" came before "b" (modulo the period of the ticks<br>
functions).</p>
<p>For the ESP8266 port the Espressif SDK has been updated to 2.0.0, the<br>
heap has been increased from 28k to 36k, and there is support for 512k<br>
devices via "make 512k". upip is included by default as frozen bytecode.<br>
The network module now allows access-point reconnection without WiFi<br>
credentials, and exposes configuration for the station DHCP hostname. The<br>
DS18B20 driver now handles negative temperatures, and NeoPixel and APA102<br>
drivers handle 4 bytes-per-pixel LEDs.</p>
<p>For the CC3200 port there is now support for loading of precompiled .mpy<br>
files and threading now works properly with interrupts.</p>
<p>A detailed list of changes follows.</p>
<p>py core:</p>
<ul>
<li>py.mk: automatically add frozen.c to source list if FROZEN_DIR is defined</li>
<li>be more specific with MP_DECLARE_CONST_FUN_OBJ macros</li>
<li>specialise builtin funcs to use separate type for fixed arg count</li>
<li>{modbuiltins,obj}: use MP_PYTHON_PRINTER where possible</li>
<li>modbuiltins: add builtin "slice", pointing to existing slice type</li>
<li>add "delattr" builtin, conditional on MICROPY_CPYTHON_COMPAT</li>
<li>sequence: fix reverse slicing of lists</li>
<li>fix null pointer dereference in mpz.c, fix missing va_end in warning.c</li>
<li>remove asserts that are always true in emitbc.c</li>
<li>fix wrong assumption that m_renew will not move if shrinking</li>
<li>change config default so m_malloc0 uses memset if GC not enabled</li>
<li>add MICROPY_FLOAT_CONST macro for defining float constants</li>
<li>move frozen bytecode Makefile rules from ports to common mk files</li>
<li>strip leading dirs from frozen mpy files, so any path can be used</li>
</ul>
<p>extmod:</p>
<ul>
<li>vfs_fat_file: check fatfs f_sync() and f_close() returns for errors</li>
<li>vfs_fat_file: make file.close() a no-op if file already closed</li>
<li>utime_mphal: ticks_diff(): switch arg order, return signed value</li>
<li>utime_mphal: add MP_THREAD_GIL_EXIT/ENTER warppers for sleep functions</li>
<li>utime_mphal: implement ticks_add(), add to all maintained ports</li>
<li>utime_mphal: allow ticks functions period be configurable by a port</li>
</ul>
<p>lib:</p>
<ul>
<li>utils/pyhelp.c: use mp_printf() instead of printf()</li>
<li>utils/pyexec: add mp_hal_set_interrupt_char() prototype</li>
<li>libm: move Thumb-specific sqrtf function to separate file</li>
</ul>
<p>drivers:</p>
<ul>
<li>add "from micropython import const" when const is used</li>
</ul>
<p>tools:</p>
<ul>
<li>upgrade upip to 1.1.4: fix error on unix when installing to non-existing<br>
absolute path</li>
<li>pip-micropython: remove deprecated wrapper tool</li>
<li>check_code_size.sh: code size validation script for CI</li>
<li>replace upip tarball with just source file, to make its inclusion as<br>
frozen modules in multiple ports less magic</li>
</ul>
<p>tests:</p>
<ul>
<li>extmod/vfs_fat: improve VFS test coverage</li>
<li>basics/builtin_slice: add test for "slice" builtin name</li>
<li>basics: add test for builtin "delattr"</li>
<li>extmod/vfs_fat_fsusermount: improve fsusermount test coverage</li>
<li>extmod/vfs_fat_oldproto: test old block device protocol</li>
<li>basics/gc1: garbage collector threshold() coverage</li>
<li>extmod/uhashlib_sha1: coverage for SHA1 algorithm</li>
<li>extmod/uhashlib_sha256: rename sha256.py test</li>
<li>btree1: fix out of memory error running on esp8266</li>
<li>extmod/ticks_diff: test for new semantics of ticks_diff()</li>
<li>extmod/framebuf1: test framebuffer pixel clear, and text function</li>
</ul>
<p>minimal port:</p>
<ul>
<li>Makefile: split rule for firmware.bin generation</li>
</ul>
<p>unix port:</p>
<ul>
<li>Makefile: remove references to deprecated pip-micropython</li>
<li>modtime: use ticks_diff() implementation from extmod/utime_mphal.c</li>
<li>mphalport.h: add warning of mp_hal_delay_ms() implementation</li>
<li>modtime: switch ticks/sleep_ms/us() to utime_mphal</li>
<li>fix symbol references for x86 Mac</li>
<li>replace upip tarball with just source file</li>
</ul>
<p>windows port:</p>
<ul>
<li>enable utime_mphal following unix, define mp_hal_ticks_*</li>
<li>fix utime_mphal compilation for msvc</li>
<li>implement mp_hal_ticks_cpu in terms of QueryPerformanceCounter</li>
</ul>
<p>qemu-arm port:</p>
<ul>
<li>exclude ticks_diff test for qemu-arm port</li>
<li>exclude extmod/vfs_fat_fileio.py test</li>
<li>exclude new vfs_fat tests</li>
<li>enable software floating point support, and float tests</li>
</ul>
<p>stmhal port:</p>
<ul>
<li>modutime: refactor to use extmod's version of ticks_cpu</li>
<li>refactor pin usage to use mp_hal_pin API</li>
<li>led: refactor LED to use mp_hal_pin_output() init function</li>
<li>Makefile: use standard rules for frozen module generation</li>
<li>modutime: consistently convert to MP_ROM_QSTR/MP_ROM_PTR</li>
<li>enable SD power save (disable CLK on idle)</li>
</ul>
<p>cc3200 port:</p>
<ul>
<li>use mp_raise_XXX helper functions to reduce code size</li>
<li>mods/pybspi: allow "write" arg of read/readinto to be positional</li>
<li>enable loading of precompiled .mpy files</li>
<li>fix thread mutex's so threading works with interrupts</li>
</ul>
<p>teensy port:</p>
<ul>
<li>update to provide new mp_hal_pin_XXX functions following stmhal</li>
</ul>
<p>esp8266 port:</p>
<ul>
<li>Makefile: use latest esptool.py flash size auto-detection</li>
<li>esp_init_data: auto-initialize system params with vendor SDK 2.0.0</li>
<li>esp8266.ld: move help.o to iROM</li>
<li>esp8266.ld: move modmachine.o to iROM</li>
<li>esp8266.ld: move main.o to iROM</li>
<li>add MP_FASTCODE modifier to put a function to iRAM</li>
<li>main: mark nlr_jump_fail() as MP_FASTCODE</li>
<li>modules/webrepl: enforce only one concurrent WebREPL connection</li>
<li>etshal.h: add few more ESP8266 vendor lib prototypes</li>
<li>modesp: add flash_user_start() function</li>
<li>add support for building firmware version for 512K modules</li>
<li>scripts: make neopixel/apa102 handle 4bpp LEDs with common code</li>
<li>modutime: consistently convert to MP_ROM_QSTR/MP_ROM_PTR</li>
<li>modnetwork: config(): fix copy-paste error in setting "mac"</li>
<li>scripts/port_diag: add descriptions for esf_buf types</li>
<li>modnetwork.c: allows AP reconnection without WiFi credentials</li>
<li>main: bump heap size to 36K</li>
<li>etshal.h: add prototypes for SPIRead/SPIWrite/SPIEraseSector</li>
<li>etshal.h: adjust size of MD5_CTX structure</li>
<li>modules: fix negative temperature in ds18x20 driver</li>
<li>rename "machine" module implementation to use contemporary naming</li>
<li>rework webrepl_setup to run over wired REPL</li>
<li>espneopixel.c: solve glitching LED issues with cpu at 80MHz</li>
<li>include upip as a standard frozen bytecode module</li>
<li>update docs for esptool 1.2.1/SDK 2.0 (--flash_size=detect)</li>
<li>modnetwork.c: expose configuration for station DHCP hostname</li>
</ul>
<p>zephyr port:</p>
<ul>
<li>implement utime module</li>
<li>use board/SoC values for startup banner based on Zephyr config</li>
<li>initial implementation of machine.Pin</li>
<li>zephyr_getchar: update for recent Zephyr refactor of console hooks</li>
<li>support time -> utime module "weaklink"</li>
<li>README: update for the current featureset, add more info</li>
<li>mpconfigport.h: move less important params to the bottom</li>
<li>Makefile: allow to adjust heap size from make command line</li>
<li>Makefile: update comments to the current state of affairs</li>
<li>Makefile: allow to override Zephyr config from make command line</li>
<li>Makefile: add minimal port</li>
<li>Makefile: add -fomit-frame-pointer to reduce code size</li>
<li>mphalport.h: update for new "unified" kernal API (sleep functions)</li>
</ul>
<p>docs:</p>
<ul>
<li>machine.SPI: bring up to date with Hardware API, make vendor-neutral</li>
<li>machine.SPI: improve descriptions of xfer methods</li>
<li>library/builtins: add docs for delattr and slice</li>
<li>library/network: reword intro paragraph</li>
<li>library/network: typo fixes, consistent acronym capitalization</li>
<li>library/index: update TOCs so builtins sorted before modules</li>
<li>utime: document ticks_cpu() in more detail</li>
<li>utime: describe new semantics of ticks_diff() (signed ring arithmetics)</li>
<li>utime: add docs for ticks_add(), improvements for other ticks_*()</li>
<li>esp8266: update for new WebREPL setup procedure</li>
<li>*/quickref.rst: use new semantics of ticks_diff()</li>
<li>library/machine.Pin: update Pin docs to align with new HW API</li>
</ul>
<p>travis:</p>
<ul>
<li>integrate tools/check_code_size.sh</li>
<li>minimal: Use CROSS=1, for binary size check</li>
</ul>
<p>examples:</p>
<ul>
<li>http_server_simplistic: add "not suitable for real use" note</li>
<li>hwapi: example showing best practices for HW API usage in apps</li>
<li>hwapi: add hwconfig for DragonBoard 410c</li>
</ul>dpgeorgetag:github.com,2008:Repository/247252679/v1.8.52016-10-17T04:32:47Zv1.8.5: New port to Zephyr, upip runs on baremetal, and reduction in code size<p>This release adds a new port of MicroPython to run on top of the Zephyr<br>
real-time operating system. As part of this there is now basic support for<br>
using mbedTLS as the ussl module. The release also brings initial support<br>
for running the package manager upip on baremetal systems with low heap<br>
memory (such as esp8266), through a Python module interface.</p>
<p>Work has been done in this release to clean up the core, removing redundant<br>
and/or unreachable code, and factoring existing duplicated code patterns.<br>
This brings a reduction of 828 bytes in code size to the bare-arm port, and<br>
1368 bytes to the minimal port. There is also improved coverage through<br>
the addition of new tests for corner cases.</p>
<p>The "micropython" module sees the addition of the "const" identity function<br>
which should be used as "from micropython import const" in scripts that<br>
want to use the MicroPython constant optimisations in the compile stage.<br>
There is also the addition of the "opt_level" function to change the<br>
parser/compiler optimisation level at runtime.</p>
<p>The behaviour of "sys.exit" (and "raise SystemExit") on baremetal is now<br>
changed: this function no longer does a soft-reset of the board, rather it<br>
just stops the running script and drops to the REPL. In order to do an<br>
actual soft reset the "machine.soft_reset" function has been added (to the<br>
stmhal port only, for the time being).</p>
<p>Following CPython, KeyError exceptions for dictionary lookups now have the<br>
failed key stored as the argument of the exception instance, accessible as<br>
exc.args[0]. The "ujson.load" function has also been added, to load JSON<br>
data from an arbitrary stream.</p>
<p>The I2C support in the machine module now has clock stretching, the<br>
addition of the "addrsize" parameter in memory transfer methods, and I2C<br>
scanning now uses dummy writes instead of dummy reads to make the scanning<br>
more reliable.</p>
<p>The CMSIS library has been upgrade to v4.30, and the boards section of<br>
the stmhal port has been refactored to use a common.ld script. The stmhal<br>
port now has a full implementation of the machine.SPI class, with support<br>
for both hardware SPI peripherals and fast software SPI. The USB HID<br>
driver in stmhal has added support to receive USB HID messages from the<br>
host.</p>
<p>py core:</p>
<ul>
<li>asmthumb: flush D-cache, and invalidate I-cache on STM32F7</li>
<li>makeqstrdefs.py: use python 2.6 syntax for set creation</li>
<li>objnone: remove unnecessary handling of MP_UNARY_OP_BOOL</li>
<li>move frozen modules rules from esp8266 port for reuse across ports</li>
<li>combine 3 comprehension emit functions (list/dict/set) into 1</li>
<li>combine 3 comprehension opcodes (list/dict/set) into 1</li>
<li>vstr: remove vstr.had_error flag and inline basic vstr functions</li>
<li>objnone: use mp_generic_unary_op instead of custom one</li>
<li>showbc: make printf's go to the platform print stream</li>
<li>remove 'name' member from mp_obj_module_t struct</li>
<li>builtinimport: fix nanbox build after change to better handle -m modules</li>
<li>stream: remove unnecessary check for NULL return from vstr_extend</li>
<li>py.mk: suppress some compiler warnings when building berkeley-db</li>
<li>shrink mp_arg_t struct by using reduced-size integer members</li>
<li>update opcode format table because 3 opcodes were removed, 1 added</li>
<li>parse: only replace constants that are standalone identifiers</li>
<li>py.mk: add support for building modussl_mbedtls</li>
<li>only store the exception instance on Py stack in bytecode try block</li>
<li>vm: use MP_OBJ_FROM_PTR to cast a type to an object</li>
<li>modmicropython: add micropython.const, alias for identity function</li>
<li>objstr: remove unreachable function used only for terse error msgs</li>
<li>emitbc: remove/refactor unreachable code, to improve coverage</li>
<li>objfun: remove unnecessary check for viper fun with 5 or more args</li>
<li>objfun: use if instead of switch to check return value of VM execute</li>
<li>objset: use mp_check_self() to check args of set/frozenset methods</li>
<li>objset: ensure that use of frozenset.update raises an exception</li>
<li>compile: fix async-for/async-with to work with simpler exc on stack</li>
<li>scope: use lookup-table to determine a scope's simple name</li>
<li>scope: shrink scope_t struct by 1 machine word</li>
<li>scope: factor common code to find locals and close over them</li>
<li>compile: fix typo when checking for parse-node kind</li>
<li>argcheck: simplify if-chain so that the last one is the default</li>
<li>objbool: defer bool's unary op implementation to small int</li>
<li>objbool: make a slight simplification of bool constructor</li>
<li>modstruct: remove unreachable code, and add comment about CPy diff</li>
<li>add mp_raise_OSError(errno) helper function</li>
<li>objstringio: add readinto() method</li>
<li>modmicropython: add micropython.opt_level([value]) function</li>
<li>compile: remove unreachable code</li>
<li>mpz: in divmod, replace check for rhs!=0 with assert</li>
<li>mpz: use assert to verify mpz does not have a fixed digit buffer</li>
<li>factor duplicated function to calculate size of formatted int</li>
<li>objint: use size_t for arguments that measure bytes/sizes</li>
<li>compile: remove debugging code for compiler dispatch</li>
<li>lexer: remove unnecessary code, and unreachable code</li>
<li>vstr: combine vstr_new_size with vstr_new since they are rarely used</li>
<li>objdict: fix optimisation for allocating result in fromkeys</li>
<li>objdict: actually provide the key that failed in KeyError exception</li>
<li>use mp_raise_msg helper function where appropriate</li>
<li>add the module specified by -m to sys.modules as '<strong>main</strong>'</li>
</ul>
<p>extmod:</p>
<ul>
<li>modussl_mbedtls: initial implementation of mbedTLS ussl module</li>
<li>uctypes: allow full 32-bit address range</li>
<li>modubinascii: fix crc32() function on 32-bit platforms</li>
<li>modussl_mbedtls: implement key= and cert= args to wrap_socket()</li>
<li>modussl_mbedtls: use 2-component include paths</li>
<li>machine_i2c: add clock stretching support</li>
<li>modussl_mbedtls: add server_hostname param for wrap_socket()</li>
<li>uzlib: add tinfgzip.c (gzip header parsing) from upstream</li>
<li>moduzlib: DecompIO: Add support for gzip-formatted streams</li>
<li>uzlib/: update uzlib to v2.0.3</li>
<li>vfs_fat: add fat_vfs_statvfs(), reused from stmhal</li>
<li>machine_i2c: add support for the addrsize parameter in mem xfers</li>
<li>machine_spi: simplify SPI xfer function to only take one buf len</li>
<li>machine_spi: factor out software SPI code from esp8266 to extmod</li>
<li>machine_spi: use delay_half, not baudrate, for internal timing</li>
<li>machine_spi: add optional support for fast software SPI</li>
<li>vfs_fat: use mp_raise_OSError helper function</li>
<li>modlwip: use mp_raise_OSError helper function</li>
<li>use mp_raise_OSError helper function</li>
<li>vfs_fat_file: use MP_Exxx errno constants</li>
<li>uzlib: update to upstream v2.1</li>
<li>machine_i2c: use writes not reads in i2c.scan()</li>
<li>vfs_fat: add file and directory checks for remove and rmdir</li>
<li>modujson: implement ujson.load() to load JSON from a stream</li>
<li>modujson: fix nanbox build</li>
<li>utime_mphal: factor out implementations in terms of mp_hal_* for reuse</li>
<li>utime_mphal: sleep_us/ms(): Don't wait on negative argument</li>
<li>modussl_mbedtls: add dummy setblocking() method</li>
</ul>
<p>lib:</p>
<ul>
<li>interrupt_char: factor out typical Ctrl+C handling from esp8266 port</li>
<li>cmsis: move CMSIS headers to lib/</li>
<li>cmsis: remove CMSIS-DSP headers, they are unused</li>
<li>cmsis: upgrade CMSIS-CORE to V4.30</li>
<li>utils/pyexec: don't treat SystemExit as "forced exit"</li>
<li>utils/pyexec: allow behaviour of SystemExit to be configurable</li>
</ul>
<p>drivers:</p>
<ul>
<li>dht: use mp_raise_OSError helper function</li>
</ul>
<p>tools:</p>
<ul>
<li>update upip to 0.8, fixes IPv6 support</li>
<li>upgrade upip to 1.0, fully self-hosted release (without fallbacks), and<br>
uses stream gzip decompression (step towards support for limited-heap<br>
baremetal systems)</li>
<li>upgrade upip to 1.1.3, initial support for running on a baremetal,<br>
low-heap systems (like esp8266), using Python module interface</li>
</ul>
<p>tests:</p>
<ul>
<li>pyb: add test for ExtInt when doing swint while disabled</li>
<li>pyb: update exp file for previously updated extint test</li>
<li>extmod/urandom: add urandom tests for error cases</li>
<li>basics: add errno1 test, to check basics of uerrno module</li>
<li>extmod: add test for machine.time_pulse_us()</li>
<li>struct1: test "l" specifier to improve coverage</li>
<li>array1: add tests for "l", "L" array types to improve coverage</li>
<li>get cmdline verbose tests running again</li>
<li>run-tests: add --via-mpy option to run test from precompiled code</li>
<li>uzlib_decompio_gz: test for DecompIO with gzip bitstream</li>
<li>basics: add test case for overflowing Py stack in try-finally</li>
<li>micropython: add tests for const names being replaced in parser</li>
<li>cmdline/cmd_showbc: fix test now that 1 value is stored on stack</li>
<li>extmod/vfs_fat_ramdisk: add test for VFS.statvfs()</li>
<li>float: add test for parsing a float from an empty string</li>
<li>basics: add test for set.difference_update with arg being itself</li>
<li>basics: add further tests for nonlocal scoping and closures</li>
<li>import: add test for compiling "import a.b as c"</li>
<li>basics: add test constructing a set from a non-trivial expression</li>
<li>basics: add test for printing OSError when errno is unknown</li>
<li>run-tests: disable cmdline/cmd_showbc test on Windows</li>
<li>extmod/btree1: checks for put, seq, string print and unsupported binary op</li>
<li>fix expected output of verbose cmdline test</li>
<li>extmod/uzlib: test adaptive huffman tree for tinflate coverage</li>
<li>improve coverage of struct with test for non-compliant behaviour</li>
<li>io/write_ext: add description comment</li>
<li>io/bytesio_ext: add test for readinto()</li>
<li>micropython: add test for micropython.opt_level() function</li>
<li>improve test coverage of py/compile.c</li>
<li>extmod/vfs_fat: test coverage for remove() and rmdir()</li>
<li>extmod: add test for ujson.load()</li>
<li>extmod/vfs_fat: replace asserts with prints and expected outputs</li>
<li>micropython: add tests for heap_lock, and emergency exceptions</li>
<li>cmdline: improve coverage test for printing bytecode</li>
<li>improve coverage of array, range, dict, slice, exc, unicode</li>
<li>add test to print full KeyError exc from failed dict lookup</li>
<li>run-tests: enable extmod/machine1.py on pyboard</li>
</ul>
<p>unix port:</p>
<ul>
<li>fix build for when MICROPY_PY_SOCKET=0</li>
<li>modjni: implement subscription for object arrays</li>
<li>modjni: add array() top-level function to create Java array</li>
<li>modjni: array(): Support creation of object arrays</li>
<li>enable btree module for coverage build</li>
<li>use mp_raise_OSError helper function</li>
<li>use common RAISE_ERRNO macro from mphalport.h</li>
</ul>
<p>windows port:</p>
<ul>
<li>enable MICROPY_PY_UERRNO</li>
</ul>
<p>qemu-arm port:</p>
<ul>
<li>enable lots of extmods and enable tests for them</li>
</ul>
<p>stmhal port:</p>
<ul>
<li>lcd: de-assert chip select after completing SPI transmission</li>
<li>{accel,lcd}: use GPIO_{set,clear}_pin</li>
<li>extint: force 0 to 1 transition on swint()</li>
<li>boards: add pllvalues.py script to compute PLL values for sysclk</li>
<li>boards: for OLIMEX_E407, enable UART1 and fix I2C1 mapping</li>
<li>use attribute to avoid inlining</li>
<li>put common definitions from linker files to common.ld</li>
<li>remove STM32CubeF2 HAL files, they are unused/unsupported</li>
<li>modmachine: fix clearing of reset-cause flags</li>
<li>add virtual com port support for STM32L476DISC</li>
<li>remove CMSIS STM32F2xx files, they are unused/unsupported</li>
<li>spi: simplify spi_transfer function to take only one buf len arg</li>
<li>mphalport: implement mp_hal_pin_{input,output,write}</li>
<li>spi: make machine.SPI class conform to correct API</li>
<li>mphalport: fix mp_hal_pin_write to use correct pin_mask</li>
<li>spi: use software SPI if no periph id given, even if pins given</li>
<li>spi: enable use of fast software SPI</li>
<li>fix linker map for STM32L476 chips</li>
<li>usbdev: add OUT endpoint to HID interface</li>
<li>usb: add support to receive USB HID messages from host</li>
<li>usb: use correct ClassData structure for HID receive</li>
<li>usb: use real packet size (not maximum) in HID receive</li>
<li>fix ESPRUINO_PICO by adding ld scripts with correct flash size</li>
<li>mphalport: change pin obj type to const pointer, to avoid casts</li>
<li>moduos: implement total-number-of-blocks field in statvfs</li>
<li>disable network and usocket for ESPRUINO_PICO</li>
<li>enable machine.time_pulse_us() function</li>
<li>use mp_raise_OSError helper function</li>
<li>pybstdio: use size_t instead of mp_uint_t</li>
<li>modutime: refactor to use extmod/utime_mphal.c</li>
<li>implement machine.soft_reset()</li>
<li>enable str.center(), str.[r]partition() and builtin compile()</li>
</ul>
<p>cc3200 port:</p>
<ul>
<li>add ssl_version argument to ssl.wrap_socket()</li>
</ul>
<p>esp8266 port:</p>
<ul>
<li>Makefile: rename SCRIPTDIR to FROZEN_DIR for consistency with FROZEN_MPY_DIR</li>
<li>ets_alt_task: ets_post: Should return 0 on success, !0 - failure</li>
<li>esp_mphal: add tentative change to mp_hal_stdin_rx_chr() to wait IRQ</li>
<li>extend system microsecond counter to 64-bits; use in ticks_ms</li>
<li>add uos.statvfs() to get filesystem status</li>
<li>moduos: move stat/statvfs funcs to sit within #if VFS guard</li>
<li>modmachine: idle(): Return number of CPU cycles spent idling</li>
<li>main: put /lib before / in sys.path</li>
<li>modpybrtc.c: implement machine.RTC.alarm_left()</li>
<li>make PY_UHASHLIB_SHA1 config depend on PY_USSL and SSL_AXTLS</li>
<li>add FLASH_MODE,FLASH_SIZE options for make deploy target</li>
<li>use mp_raise_OSError helper function</li>
<li>make neopixel support configurable</li>
<li>mpconfigport: enable MICROPY_PY_BUILTINS_SLICE_ATTRS</li>
<li>enable sys.{stdin,stdout,stderr}.buffer for raw serial access</li>
<li>enable importing of precompiled .mpy files</li>
<li>enable micropython.alloc_emergency_exception_buf()</li>
</ul>
<p>zephyr port:</p>
<ul>
<li>initial Zephyr RTOS port, MicroPython part</li>
<li>initial Zephyr RTOS port, Zephyr part</li>
<li>add zephyr_getchar module to handle console input</li>
<li>switch to microkernel, required for network to work in background</li>
<li>automatically derive ARCH</li>
<li>support extra make targets</li>
<li>Makefile: automatically derive target-specific CFLAGS</li>
<li>use recently added "make outputexports" Zephyr target</li>
<li>add README</li>
<li>enable stack checking and micropython.mem_info()</li>
<li>enable frozen modules support</li>
<li>main: execute main.py frozen module on boot, if available</li>
<li>zephyr_getchar: add support for Ctrl+C handling</li>
<li>add Ctrl+C handling</li>
<li>implement the help() function</li>
<li>add copyright blurbs</li>
</ul>
<p>README:</p>
<ul>
<li>remove issue-stats badges, the service is no longer available</li>
<li>mention _thread module availability in select ports</li>
</ul>
<p>docs:</p>
<ul>
<li>library/pyb.SPI: init(): describe "bits" argument</li>
<li>library/machine: update description of disable/enable IRQ funcs</li>
<li>uos: add uos.statvfs() documentation</li>
<li>wipy: correct deep sleep current figure</li>
<li>wipy: small doc fixes</li>
<li>reference: add constrained.rst doc</li>
</ul>
<p>travis:</p>
<ul>
<li>abandon mingw32 in favour of mingw-w64</li>
<li>run feature and coverage test for precompiled mpy files</li>
</ul>
<p>examples:</p>
<ul>
<li>network/http_client*: use \r\n line-endings in request</li>
</ul>dpgeorgetag:github.com,2008:Repository/247252679/v1.8.42016-09-09T04:07:22Zv1.8.4: Support for stream decompression in uzlib, and more ESP8266 features<p>This release includes some bug fixes, code clean-up, updates to the docs,<br>
more tests, and various feature additions. The uzlib module now supports<br>
efficient stream decompression in the form of the uzlib.DecompIO class.<br>
Freezing of bytecode now supports floats for the ESP8266 port, as well as<br>
complex numbers for all ports. The stmhal port has ADC working on L4<br>
microcontrollers, fixed initialisation for DAC, and addition of the<br>
machine.WDT class and machine.reset_cause function.</p>
<p>For the ESP8266 port Pin(16) now works as an input pin and the hardware<br>
SPI peripheral is exposed as machine.SPI(1). The os.umount function is<br>
implemented and the port supports mounting of externally connected SD<br>
cards. The machine.WDT class is added, wlan.scan() is fixed to return all<br>
access points, and there is support for DS18S20 devices.</p>
<p>py core:</p>
<ul>
<li>runtime: factor out exception raising helpers</li>
<li>runtime: define mp_check_self(pred) helper macro</li>
<li>objdict: get rid of asserts (remove/replace with mp_check_self())</li>
<li>get rid of assert() in method argument checking functions</li>
<li>objtuple: in tuple_cmp_helper, use mp_check_self instead of raising</li>
<li>objstr: use mp_raise_{Type,Value}Error instead of mp_raise_msg</li>
<li>obj.h: for obj reprs A,B,C use void* explicitly for mp_obj_t typedef</li>
<li>mpconfigport.h: remove typedef of machine_ptr_t, it's no longer needed</li>
<li>sequence: allow to use bignums as indices in slice objects</li>
<li>stream.c: use mp_obj_get_type in mp_get_stream_raise</li>
<li>gc: add MICROPY_GC_CONSERVATIVE_CLEAR option to always zero memory</li>
<li>compile: don't compile assert statements when optimisations enabled</li>
<li>modstruct: use more compact mp_raise_ValueError function</li>
<li>emitglue: use more compact mp_raise_ValueError function</li>
<li>rename struct mp_code_state to mp_code_state_t</li>
<li>mkrules.mk: allow to override name of libmicropython.a</li>
<li>mpprint: fail an assertion with unsupported format specifiers</li>
<li>makeqstrdata.py: compute the qstr hash from bytes, not characters</li>
<li>if str/bytes hash is 0 then explicitly compute it</li>
<li>emitglue.c: provide mp_raw_code_load_file for any unix architecture</li>
<li>add MICROPY_USE_INTERNAL_PRINTF option, defaults to enabled</li>
</ul>
<p>extmod:</p>
<ul>
<li>modwebrepl: set_password(): raise exception for too long password</li>
<li>uzlib/: update uzlib to v2.0: new API supporting stream decompression</li>
<li>moduzlib: refactor to new stream-compatible uzlib 2.0 API</li>
<li>uzlib/: update uzlib to v2.0.1: fixes for pedantic compiler warnings</li>
<li>uzlib/: update uzlib to v2.0.2: consistently use stdint types</li>
<li>modbtree: do CHECK_ERROR after __bt_seq()</li>
<li>modubinascii: implement binascii.crc32</li>
<li>modubinascii: make crc32() support configurable</li>
<li>modframebuf: fix pixel accessor to return a 1-bit result</li>
<li>add machine_spi with generic SPI C-protocol and helper methods</li>
<li>modframebuf: fix fill and scroll when height not divisible by 8</li>
<li>moduzlib: implement zlib stream decompressor class, DecompIO</li>
<li>moduzlib: use mperrno.h for error constants</li>
<li>modframebuf: include font from stmhal directory explicitly</li>
<li>moduzlib: support wbits arg to DecompIO</li>
<li>framebuf: add the xstep!=0 case to scroll() method</li>
</ul>
<p>lib:</p>
<ul>
<li>utils/stdout_helpers: fix function signature to match py/mphal.h</li>
<li>berkeley-db-1.xx: update to upstream, fixes MacOSX build</li>
<li>utils/pyexec: qstr_pool_info() requires size_t* parameters</li>
</ul>
<p>drivers:</p>
<ul>
<li>sdcard: port the SDCard driver to new machine API, with backwards<br>
compatibility for pyboard</li>
</ul>
<p>tools:</p>
<ul>
<li>mpy-tool.py: support freezing float literals with obj-repr C</li>
<li>mpy-tool.py: store qstr config values in global config object</li>
<li>mpy-tool.py: compute the hash value for str/bytes objects</li>
<li>mpy-tool.py: support freezing of complex numbers</li>
</ul>
<p>tests:</p>
<ul>
<li>rename zlibd_decompress.py -> uzlib_decompress.py</li>
<li>basics: add more tuple tests to improve coverage testing</li>
<li>basics: add more list tests to improve coverage testing</li>
<li>misc/non_compliant: add tests to improve coverage testing</li>
<li>basics: add test for break from within try within a for-loop</li>
<li>basics: add a test file for overriding special methods</li>
<li>basics/special_methods: enable tests for extra special methods</li>
<li>uzlib_decompress: actually test raw DEFLATE stream</li>
<li>run-tests: disable thread/thread_lock4.py on Travis</li>
<li>run-tests: disable thread/stress_heap.py when running on Travis</li>
<li>cmdline: add test for -O option to check optimisation value</li>
<li>extmod/vfs_fat_ramdisk: add tests for VFS.umount()</li>
<li>run-tests: disable thread_gc1.py test on Travis</li>
<li>unix/extra_coverage: add test for str/bytes with invalid hash</li>
<li>extmod: add test for uzlib.DecompIO</li>
<li>extmod: add a test for framebuf module, tested by coverage build</li>
<li>extmod/uzlib_decompio: add zlib bitstream testcases</li>
<li>extmod/framebuf1: add tests for scrolling in the x-direction</li>
<li>run-tests: disable thread/stress_recurse.py test on Travis</li>
</ul>
<p>unix port:</p>
<ul>
<li>mpconfigport.h: don't include stdio.h on MacOS</li>
<li>when find'ing frozen files don't use extra slash, do follow symlinks</li>
</ul>
<p>qemu-arm port:</p>
<ul>
<li>enable MICROPY_PY_ALL_SPECIAL_METHODS</li>
</ul>
<p>stmhal port:</p>
<ul>
<li>boards: update STM32L476 pin defs to include ADC channels</li>
<li>adc.c: get ADC working on STM32L4 MCUs</li>
<li>fix timer capture/compare interrupt handling for TIM1 and TIM8</li>
<li>remove obsolete code for special handling of TIM3 irq settings</li>
<li>make ADC channel 16 available on L4 MCUs</li>
<li>update pin print to print new constants</li>
<li>modusocket: set self->nic to MP_OBJ_NULL after socket close</li>
<li>update boot.py files to use VCP instead of CDC</li>
<li>spi: factor out SPI transfer code to a single function</li>
<li>spi: support new machine SPI methods in legacy SPI object</li>
<li>add machine.WDT class</li>
<li>set STM32F7DISC CPU Frequency to 216 MHz</li>
<li>dac: fix DAC (re-)initialisation by resetting DMA</li>
<li>wdt: implement keyword args to WDT constructor</li>
<li>modmachine: implement machine.reset_cause() function, and consts</li>
<li>machine.POWER_ON is renamed to machine.PWRON_RESET</li>
<li>when find'ing frozen files don't use extra slash, do follow symlinks</li>
</ul>
<p>cc3200 port:</p>
<ul>
<li>add machine.PWRON_RESET constant (machine.POWER_ON is now deprecated)</li>
</ul>
<p>teensy port:</p>
<ul>
<li>fix execution of frozen boot.py and main.py</li>
</ul>
<p>esp8266 port:</p>
<ul>
<li>fix reading of pin object for GPIO16; Pin(16) now works as an input</li>
<li>PULL_UP is not supported on Pin(16), so raise an exception in this case</li>
<li>enable support for all special methods</li>
<li>modpybhspi: add a HSPI module for hardware SPI support</li>
<li>modmachinespi: add a factory method for SoftSPI/HSPI</li>
<li>esp_mphal: no longer disable watchdog on startup</li>
<li>modpybrtc: use 64-bit arithmetic when computing alarm expiry</li>
<li>hspi: enable duplex operation of hardware SPI</li>
<li>modous: add os.umount method to unmount a filesystem</li>
<li>modmachinewdt: implement machine.WDT class</li>
<li>modules: split onewire.py into OneWire and DS18X20 driver</li>
<li>modules/onewire: change onewire.read() to onewire.readinto()</li>
<li>modules/ds18x20.py: add support for DS18S20 devices</li>
<li>modpybspi: use generic SPI helper methods to implement SPI</li>
<li>modpybhspi: simplify HSPI driver by using 1 function for xfers</li>
<li>modmachinewdt: add .deinit() method</li>
<li>modmachine: add WDT_RESET and SOFT_RESET constants</li>
<li>modmachine: don't expose internal SoftSPI and HSPI classes</li>
<li>modmachine: simplify SPI class implementation multiplexing</li>
<li>espneopixel: disable IRQs during eps.neopixel_write</li>
<li>modnetwork: fix wlan.scan() method so it returns all networks</li>
<li>modmachine: map PWR_ON_RESET to vendor's REASON_DEFAULT_RST</li>
<li>machine.PWR_ON_RESET is renamed to machine.PWRON_RESET</li>
<li>when find'ing frozen files don't use extra slash, do follow symlinks</li>
</ul>
<p>docs:</p>
<ul>
<li>esp8266/tutorial/pins: fix typo in commands for pin input mode</li>
<li>esp8266/intro: add command to install esptool.py 1.0.1 via pip</li>
<li>library/machine.WDT: add note that WDT is only available on WiPy</li>
<li>esp8266/quickref: fix and update the SPI docs</li>
<li>esp8266: update quickref and tutorial for OneWire/DS18X20 driver</li>
<li>pyboard: update USB mouse tutorial to use VCP instead of CDC</li>
<li>pyboard: update USB mouse tutorial to use pyb.USB_HID()</li>
<li>library: add reference for pyb.usb_mode and pyb.USB_HID</li>
<li>pyboard/quickref: add links to pinouts for other pyboard variants</li>
<li>pyboard/quickref: add section on "delay and timing" for utime mod</li>
<li>esp8266/quickref: add internal links to docs for some modules</li>
<li>esp8266/quickref: update information on SPI classes</li>
<li>esp8266/quickref: further improvements for SPI subsections</li>
<li>library/machine.WDT: add that WDT is available on pyboard</li>
<li>reference/isr_rules.rst: two minor additions to docs for using ISR</li>
</ul>
<p>misc:</p>
<ul>
<li>add *.pyc to .gitignore, because Python 2 doesn't use <strong>pycache</strong></li>
<li>build mpy-cross as part of the Travis process</li>
</ul>dpgeorge