summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGlenn Ruben Bakke <glennbakke@gmail.com>2017-06-03 23:23:08 +0200
committerGlenn Ruben Bakke <glennbakke@gmail.com>2017-06-03 23:23:08 +0200
commit227eeb1408cd442e896c33fd82d1d709ee9c95cd (patch)
tree7dfd4bf6894d59c299107960c47bace77cf166df
parentd83c4fa130692ed9dbdfbe1bb8903da5721e7734 (diff)
parenta0dbbbebb8c0286e00ae06751b0173cbca4ec801 (diff)
Merge remote-tracking branch 'upstream/master' into nrf5_no_sdk
-rw-r--r--cc3200/README.md2
-rw-r--r--cc3200/application.mk1
-rw-r--r--cc3200/mpconfigport.h2
-rw-r--r--docs/esp8266/quickref.rst6
-rw-r--r--docs/esp8266/tutorial/pins.rst4
-rw-r--r--docs/esp8266/tutorial/repl.rst9
-rw-r--r--docs/library/btree.rst2
-rw-r--r--docs/library/machine.Pin.rst14
-rw-r--r--docs/library/machine.SD.rst2
-rw-r--r--docs/library/machine.UART.rst2
-rw-r--r--docs/library/machine.rst16
-rw-r--r--docs/library/network.rst46
-rw-r--r--docs/library/uhashlib.rst4
-rw-r--r--docs/library/uos.rst47
-rw-r--r--docs/library/utime.rst4
-rw-r--r--docs/pyboard/general.rst4
-rw-r--r--docs/sphinx_selective_exclude/README.md2
-rw-r--r--docs/sphinx_selective_exclude/modindex_exclude.py2
-rw-r--r--docs/wipy/general.rst62
-rw-r--r--esp8266/Makefile1
-rw-r--r--esp8266/README.md2
-rw-r--r--esp8266/machine_rtc.c2
-rw-r--r--esp8266/mpconfigport.h2
-rw-r--r--examples/conwaylife.py4
-rw-r--r--examples/embedding/Makefile.upylib2
-rw-r--r--examples/embedding/README.md2
-rw-r--r--extmod/modlwip.c6
-rw-r--r--extmod/modwebsocket.c2
-rw-r--r--lib/libm/sf_ldexp.c2
-rw-r--r--lib/timeutils/timeutils.c2
-rw-r--r--lib/utils/interrupt_char.c12
-rw-r--r--lib/utils/stdout_helpers.c2
-rw-r--r--py/asmthumb.c2
-rw-r--r--py/builtinimport.c4
-rw-r--r--py/compile.c4
-rw-r--r--py/misc.h2
-rw-r--r--py/mkenv.mk2
-rw-r--r--py/modbuiltins.c32
-rw-r--r--py/mpconfig.h8
-rw-r--r--py/obj.c2
-rw-r--r--py/objstr.c9
-rw-r--r--py/py.mk2
-rw-r--r--py/ringbuf.h2
-rw-r--r--py/stream.c2
-rw-r--r--py/vm.c4
-rw-r--r--qemu-arm/README.md2
-rw-r--r--stmhal/Makefile1
-rw-r--r--stmhal/boards/NUCLEO_F767ZI/mpconfigboard.h2
-rw-r--r--stmhal/boards/NUCLEO_F767ZI/stm32f7xx_hal_conf.h2
-rw-r--r--stmhal/input.c44
-rw-r--r--stmhal/mpconfigport.h2
-rw-r--r--teensy/Makefile1
-rw-r--r--teensy/mpconfigport.h2
-rw-r--r--tests/basics/namedtuple1.py2
-rw-r--r--tests/basics/string_rsplit.py4
-rw-r--r--tests/basics/try_reraise2.py2
-rw-r--r--tests/pyb/can.py2
-rw-r--r--tests/thread/stress_aes.py2
-rw-r--r--tests/wipy/uart.py2
-rw-r--r--tools/insert-usb-ids.py2
-rwxr-xr-xtools/pyboard.py2
-rw-r--r--unix/Makefile2
-rw-r--r--unix/input.c43
-rw-r--r--unix/modsocket.c2
-rw-r--r--unix/mpconfigport.h2
-rw-r--r--unix/mphalport.h13
-rw-r--r--windows/mpconfigport.h2
-rw-r--r--windows/windows_mphal.c2
-rw-r--r--zephyr/modusocket.c3
-rw-r--r--zephyr/modutime.c2
70 files changed, 222 insertions, 270 deletions
diff --git a/cc3200/README.md b/cc3200/README.md
index 753fd450a..53cad3ba0 100644
--- a/cc3200/README.md
+++ b/cc3200/README.md
@@ -138,7 +138,7 @@ If `WIPY_IP`, `WIPY_USER` or `WIPY_PWD` are omitted the default values (the ones
## Regarding old revisions of the CC3200-LAUNCHXL
First silicon (pre-release) revisions of the CC3200 had issues with the ram blocks, and MicroPython cannot run
-there. Make sure to use a **v4.1 (or higer) LAUNCHXL board** when trying this port, otherwise it won't work.
+there. Make sure to use a **v4.1 (or higher) LAUNCHXL board** when trying this port, otherwise it won't work.
### Note regarding FileZilla
diff --git a/cc3200/application.mk b/cc3200/application.mk
index 5d25424e1..1f54b764b 100644
--- a/cc3200/application.mk
+++ b/cc3200/application.mk
@@ -151,7 +151,6 @@ APP_LIB_SRC_C = $(addprefix lib/,\
APP_STM_SRC_C = $(addprefix stmhal/,\
bufhelper.c \
- input.c \
irq.c \
pybstdio.c \
)
diff --git a/cc3200/mpconfigport.h b/cc3200/mpconfigport.h
index 4d19900ae..4bd583a4b 100644
--- a/cc3200/mpconfigport.h
+++ b/cc3200/mpconfigport.h
@@ -80,6 +80,7 @@
#define MICROPY_VFS_FAT (1)
#define MICROPY_PY_ASYNC_AWAIT (0)
#define MICROPY_PY_ALL_SPECIAL_METHODS (1)
+#define MICROPY_PY_BUILTINS_INPUT (1)
#define MICROPY_PY_BUILTINS_HELP (1)
#define MICROPY_PY_BUILTINS_HELP_TEXT cc3200_help_text
#ifndef DEBUG
@@ -142,7 +143,6 @@
// extra built in names to add to the global namespace
#define MICROPY_PORT_BUILTINS \
- { MP_OBJ_NEW_QSTR(MP_QSTR_input), (mp_obj_t)&mp_builtin_input_obj }, \
{ MP_OBJ_NEW_QSTR(MP_QSTR_open), (mp_obj_t)&mp_builtin_open_obj }, \
// extra built in modules to add to the list of known ones
diff --git a/docs/esp8266/quickref.rst b/docs/esp8266/quickref.rst
index 5ff33e02b..ccf6365c8 100644
--- a/docs/esp8266/quickref.rst
+++ b/docs/esp8266/quickref.rst
@@ -107,9 +107,9 @@ Use the :ref:`machine.Pin <machine.Pin>` class::
from machine import Pin
p0 = Pin(0, Pin.OUT) # create output pin on GPIO0
- p0.high() # set pin to high
- p0.low() # set pin to low
- p0.value(1) # set pin to high
+ p0.on() # set pin to "on" (high) level
+ p0.off() # set pin to "off" (low) level
+ p0.value(1) # set pin to on/high
p2 = Pin(2, Pin.IN) # create input pin on GPIO2
print(p2.value()) # get value, 0 or 1
diff --git a/docs/esp8266/tutorial/pins.rst b/docs/esp8266/tutorial/pins.rst
index a44f40d3a..cd45c83cd 100644
--- a/docs/esp8266/tutorial/pins.rst
+++ b/docs/esp8266/tutorial/pins.rst
@@ -35,8 +35,8 @@ Then set its value using::
Or::
- >>> pin.low()
- >>> pin.high()
+ >>> pin.off()
+ >>> pin.on()
External interrupts
-------------------
diff --git a/docs/esp8266/tutorial/repl.rst b/docs/esp8266/tutorial/repl.rst
index 21e889c9a..ba64fcccb 100644
--- a/docs/esp8266/tutorial/repl.rst
+++ b/docs/esp8266/tutorial/repl.rst
@@ -101,11 +101,12 @@ turn it on and off using the following code::
>>> import machine
>>> pin = machine.Pin(2, machine.Pin.OUT)
- >>> pin.high()
- >>> pin.low()
+ >>> pin.on()
+ >>> pin.off()
-Note that ``high`` might turn the LED off and ``low`` might turn it on (or vice
-versa), depending on how the LED is wired on your board.
+Note that ``on`` method of a Pin might turn the LED off and ``off`` might
+turn it on (or vice versa), depending on how the LED is wired on your board.
+To resolve this, machine.Signal class is provided.
Line editing
~~~~~~~~~~~~
diff --git a/docs/library/btree.rst b/docs/library/btree.rst
index aebcbc160..bd7890586 100644
--- a/docs/library/btree.rst
+++ b/docs/library/btree.rst
@@ -69,7 +69,7 @@ Functions
Open a database from a random-access `stream` (like an open file). All
other parameters are optional and keyword-only, and allow to tweak advanced
- paramters of the database operation (most users will not need them):
+ parameters of the database operation (most users will not need them):
* `flags` - Currently unused.
* `cachesize` - Suggested maximum memory cache size in bytes. For a
diff --git a/docs/library/machine.Pin.rst b/docs/library/machine.Pin.rst
index 2efd84688..05ceb4ad3 100644
--- a/docs/library/machine.Pin.rst
+++ b/docs/library/machine.Pin.rst
@@ -146,18 +146,20 @@ Methods
When setting the value this method returns ``None``.
-.. method:: Pin.out_value()
-
- Return the value stored in the output buffer of a pin, regardless of its mode.
-
- Not all ports implement this method.
-
.. method:: Pin.__call__([x])
Pin objects are callable. The call method provides a (fast) shortcut to set
and get the value of the pin. It is equivalent to Pin.value([x]).
See :meth:`Pin.value` for more details.
+.. method:: Pin.on()
+
+ Set pin to "1" output level.
+
+.. method:: Pin.off()
+
+ Set pin to "0" output level.
+
.. method:: Pin.mode([mode])
Get or set the pin mode.
diff --git a/docs/library/machine.SD.rst b/docs/library/machine.SD.rst
index 0eb024602..608e95831 100644
--- a/docs/library/machine.SD.rst
+++ b/docs/library/machine.SD.rst
@@ -34,7 +34,7 @@ Methods
.. method:: SD.init(id=0, pins=('GP10', 'GP11', 'GP15'))
- Enable the SD card. In order to initalize the card, give it a 3-tuple:
+ Enable the SD card. In order to initialize the card, give it a 3-tuple:
``(clk_pin, cmd_pin, dat0_pin)``.
.. method:: SD.deinit()
diff --git a/docs/library/machine.UART.rst b/docs/library/machine.UART.rst
index f9c8efef7..64ff28e1a 100644
--- a/docs/library/machine.UART.rst
+++ b/docs/library/machine.UART.rst
@@ -16,7 +16,7 @@ UART objects can be created and initialised using::
uart = UART(1, 9600) # init with given baudrate
uart.init(9600, bits=8, parity=None, stop=1) # init with given parameters
-Supported paramters differ on a board:
+Supported parameters differ on a board:
Pyboard: Bits can be 7, 8 or 9. Stop can be 1 or 2. With `parity=None`,
only 8 and 9 bits are supported. With parity enabled, only 7 and 8 bits
diff --git a/docs/library/machine.rst b/docs/library/machine.rst
index c2c6b83fd..7ea7f565e 100644
--- a/docs/library/machine.rst
+++ b/docs/library/machine.rst
@@ -145,13 +145,13 @@ Classes
.. toctree::
:maxdepth: 1
- machine.I2C.rst
machine.Pin.rst
machine.Signal.rst
- machine.RTC.rst
+ machine.UART.rst
machine.SPI.rst
+ machine.I2C.rst
+ machine.RTC.rst
machine.Timer.rst
- machine.UART.rst
machine.WDT.rst
.. only:: port_wipy
@@ -159,12 +159,12 @@ Classes
.. toctree::
:maxdepth: 1
- machine.ADC.rst
- machine.I2C.rst
machine.Pin.rst
- machine.RTC.rst
- machine.SD.rst
+ machine.UART.rst
machine.SPI.rst
+ machine.I2C.rst
+ machine.RTC.rst
machine.Timer.rst
- machine.UART.rst
machine.WDT.rst
+ machine.ADC.rst
+ machine.SD.rst
diff --git a/docs/library/network.rst b/docs/library/network.rst
index 251e68c76..75640250f 100644
--- a/docs/library/network.rst
+++ b/docs/library/network.rst
@@ -29,52 +29,6 @@ For example::
data = s.recv(1000)
s.close()
-.. only:: port_wipy
-
- .. _network.Server:
-
- class Server
- ============
-
- The ``Server`` class controls the behaviour and the configuration of the FTP and telnet
- services running on the WiPy. Any changes performed using this class' methods will
- affect both.
-
- Example::
-
- import network
- server = network.Server()
- server.deinit() # disable the server
- # enable the server again with new settings
- server.init(login=('user', 'password'), timeout=600)
-
- Constructors
- ------------
-
- .. class:: network.Server(id, ...)
-
- Create a server instance, see ``init`` for parameters of initialization.
-
- Methods
- -------
-
- .. method:: server.init(\*, login=('micro', 'python'), timeout=300)
-
- Init (and effectively start the server). Optionally a new ``user``, ``password``
- and ``timeout`` (in seconds) can be passed.
-
- .. method:: server.deinit()
-
- Stop the server
-
- .. method:: server.timeout([timeout_in_seconds])
-
- Get or set the server timeout.
-
- .. method:: server.isrunning()
-
- Returns ``True`` if the server is running, ``False`` otherwise.
-
.. only:: port_pyboard
class CC3K
diff --git a/docs/library/uhashlib.rst b/docs/library/uhashlib.rst
index cd0216dae..6b9a764ba 100644
--- a/docs/library/uhashlib.rst
+++ b/docs/library/uhashlib.rst
@@ -15,11 +15,11 @@ be implemented:
* SHA1 - A previous generation algorithm. Not recommended for new usages,
but SHA1 is a part of number of Internet standards and existing
- applications, so boards targetting network connectivity and
+ applications, so boards targeting network connectivity and
interoperatiability will try to provide this.
* MD5 - A legacy algorithm, not considered cryptographically secure. Only
- selected boards, targetting interoperatibility with legacy applications,
+ selected boards, targeting interoperatibility with legacy applications,
will offer this.
Constructors
diff --git a/docs/library/uos.rst b/docs/library/uos.rst
index d1f83d2cc..3d0aa46c7 100644
--- a/docs/library/uos.rst
+++ b/docs/library/uos.rst
@@ -4,28 +4,9 @@
.. module:: uos
:synopsis: basic "operating system" services
-The ``os`` module contains functions for filesystem access and ``urandom``
+The ``uos`` module contains functions for filesystem access and ``urandom``
function.
-Port specifics
---------------
-
-The filesystem has ``/`` as the root directory and the
-available physical drives are accessible from here. They are currently:
-
- ``/flash`` -- the internal flash filesystem
-
- ``/sd`` -- the SD card (if it exists)
-
-.. only:: port_pyboard
-
- On boot up, the current directory is ``/flash`` if no SD card is inserted,
- otherwise it is ``/sd``.
-
-.. only:: port_wipy
-
- On boot up, the current directory is ``/flash``.
-
Functions
---------
@@ -106,26 +87,8 @@ Functions
Return a bytes object with n random bytes. Whenever possible, it is
generated by the hardware random number generator.
-.. only:: port_wipy
-
- .. function:: mount(block_device, mount_point, \*, readonly=False)
-
- Mounts a block device (like an ``SD`` object) in the specified mount
- point. Example::
-
- os.mount(sd, '/sd')
-
- .. function:: unmount(path)
-
- Unmounts a previously mounted block device from the given path.
-
- .. function:: mkfs(block_device or path)
-
- Formats the specified path, must be either ``/flash`` or ``/sd``.
- A block device can also be passed like an ``SD`` object before
- being mounted.
-
- .. function:: dupterm(stream_object)
+.. function:: dupterm(stream_object)
- Duplicate the terminal (the REPL) on the passed stream-like object.
- The given object must at least implement the ``.read()`` and ``.write()`` methods.
+ Duplicate or switch MicroPython terminal (the REPL) on the passed stream-like
+ object. The given object must implement the `.readinto()` and `.write()`
+ methods. If ``None`` is passed, previously set redirection is cancelled.
diff --git a/docs/library/utime.rst b/docs/library/utime.rst
index 871f6c678..f3a067cde 100644
--- a/docs/library/utime.rst
+++ b/docs/library/utime.rst
@@ -146,8 +146,8 @@ Functions
too distant inbetween, see below). The function returns **signed** value in the range
[``-TICKS_PERIOD/2`` .. ``TICKS_PERIOD/2-1``] (that's a typical range definition for
two's-complement signed binary integers). If the result is negative, it means that
- ``ticks1`` occured earlier in time than ``ticks2``. Otherwise, it means that
- ``ticks1`` occured after ``ticks2``. This holds ``only`` if ``ticks1`` and ``ticks2``
+ ``ticks1`` occurred earlier in time than ``ticks2``. Otherwise, it means that
+ ``ticks1`` occurred after ``ticks2``. This holds ``only`` if ``ticks1`` and ``ticks2``
are apart from each other for no more than ``TICKS_PERIOD/2-1`` ticks. If that does
not hold, incorrect result will be returned. Specifically, if two tick values are
apart for ``TICKS_PERIOD/2-1`` ticks, that value will be returned by the function.
diff --git a/docs/pyboard/general.rst b/docs/pyboard/general.rst
index 48e014644..1d040f6cc 100644
--- a/docs/pyboard/general.rst
+++ b/docs/pyboard/general.rst
@@ -10,7 +10,9 @@ is inserted into the slot, it is available as ``/sd``.
When the pyboard boots up, it needs to choose a filesystem to boot from. If
there is no SD card, then it uses the internal filesystem ``/flash`` as the boot
-filesystem, otherwise, it uses the SD card ``/sd``.
+filesystem, otherwise, it uses the SD card ``/sd``. After the boot, the current
+directory is set to one of the directories above.
+
If needed, you can prevent the use of the SD card by creating an empty file
called ``/flash/SKIPSD``. If this file exists when the pyboard boots
up then the SD card will be skipped and the pyboard will always boot from the
diff --git a/docs/sphinx_selective_exclude/README.md b/docs/sphinx_selective_exclude/README.md
index cc9725c21..dab140739 100644
--- a/docs/sphinx_selective_exclude/README.md
+++ b/docs/sphinx_selective_exclude/README.md
@@ -66,7 +66,7 @@ index for PDF, just the same as for HTML.
search_auto_exclude
-------------------
-Even if you exclude soem documents from toctree:: using only::
+Even if you exclude some documents from toctree:: using only::
directive, they will be indexed for full-text search, so user may
find them and get confused. This plugin follows very simple idea
that if you didn't include some documents in the toctree, then
diff --git a/docs/sphinx_selective_exclude/modindex_exclude.py b/docs/sphinx_selective_exclude/modindex_exclude.py
index 18b49cc80..bf8db795e 100644
--- a/docs/sphinx_selective_exclude/modindex_exclude.py
+++ b/docs/sphinx_selective_exclude/modindex_exclude.py
@@ -2,7 +2,7 @@
# This is a Sphinx documentation tool extension which allows to
# exclude some Python modules from the generated indexes. Modules
# are excluded both from "modindex" and "genindex" index tables
-# (in the latter case, all members of a module are exlcuded).
+# (in the latter case, all members of a module are excluded).
# To control exclusion, set "modindex_exclude" variable in Sphinx
# conf.py to the list of modules to exclude. Note: these should be
# modules (as defined by py:module directive, not just raw filenames).
diff --git a/docs/wipy/general.rst b/docs/wipy/general.rst
index 8b9b91c53..f28edb4e4 100644
--- a/docs/wipy/general.rst
+++ b/docs/wipy/general.rst
@@ -53,7 +53,7 @@ which is stored within the external serial flash memory. If a micro SD card
is hooked-up and mounted, it will be available as well.
When the WiPy starts up, it always boots from the ``boot.py`` located in the
-``/flash`` file system.
+``/flash`` file system. On boot up, the current directory is ``/flash``.
The file system is accessible via the native FTP server running in the WiPy.
Open your FTP client of choice and connect to:
@@ -323,3 +323,63 @@ Unrelated function in machine module
this function is not called then the default file main.py will be executed.
It only makes sense to call this function from within boot.py.
+
+Adhoc way to control telnet/FTP server via network module
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The ``Server`` class controls the behaviour and the configuration of the FTP and telnet
+services running on the WiPy. Any changes performed using this class' methods will
+affect both.
+
+Example::
+
+ import network
+ server = network.Server()
+ server.deinit() # disable the server
+ # enable the server again with new settings
+ server.init(login=('user', 'password'), timeout=600)
+
+.. class:: network.Server(id, ...)
+
+ Create a server instance, see ``init`` for parameters of initialization.
+
+.. method:: server.init(\*, login=('micro', 'python'), timeout=300)
+
+ Init (and effectively start the server). Optionally a new ``user``, ``password``
+ and ``timeout`` (in seconds) can be passed.
+
+.. method:: server.deinit()
+
+ Stop the server
+
+.. method:: server.timeout([timeout_in_seconds])
+
+ Get or set the server timeout.
+
+.. method:: server.isrunning()
+
+ Returns ``True`` if the server is running, ``False`` otherwise.
+
+Adhoc VFS-like support
+~~~~~~~~~~~~~~~~~~~~~~
+
+WiPy doesn't implement full MicroPython VFS support, instead following
+functions are defined in ``uos`` module:
+
+.. function:: mount(block_device, mount_point, \*, readonly=False)
+
+ Mounts a block device (like an ``SD`` object) in the specified mount
+ point. Example::
+
+ os.mount(sd, '/sd')
+
+.. function:: unmount(path)
+
+ Unmounts a previously mounted block device from the given path.
+
+.. function:: mkfs(block_device or path)
+
+ Formats the specified path, must be either ``/flash`` or ``/sd``.
+ A block device can also be passed like an ``SD`` object before
+ being mounted.
+
diff --git a/esp8266/Makefile b/esp8266/Makefile
index a3da9d398..cf4b288ca 100644
--- a/esp8266/Makefile
+++ b/esp8266/Makefile
@@ -94,7 +94,6 @@ SRC_C = \
STM_SRC_C = $(addprefix stmhal/,\
pybstdio.c \
- input.c \
)
EXTMOD_SRC_C = $(addprefix extmod/,\
diff --git a/esp8266/README.md b/esp8266/README.md
index 897bb4737..d717d26fe 100644
--- a/esp8266/README.md
+++ b/esp8266/README.md
@@ -100,7 +100,7 @@ programming).
__WiFi__
-Initally, the device configures itself as a WiFi access point (AP).
+Initially, the device configures itself as a WiFi access point (AP).
- ESSID: MicroPython-xxxxxx (x’s are replaced with part of the MAC address).
- Password: micropythoN (note the upper-case N).
- IP address of the board: 192.168.4.1.
diff --git a/esp8266/machine_rtc.c b/esp8266/machine_rtc.c
index 019b705ba..b17bcb261 100644
--- a/esp8266/machine_rtc.c
+++ b/esp8266/machine_rtc.c
@@ -93,7 +93,7 @@ void pyb_rtc_set_us_since_2000(uint64_t nowus) {
int64_t delta = nowus - (((uint64_t)rtc_last_ticks * cal) >> 12);
// As the calibration value jitters quite a bit, to make the
- // clock at least somewhat practially usable, we need to store it
+ // clock at least somewhat practically usable, we need to store it
system_rtc_mem_write(MEM_CAL_ADDR, &cal, sizeof(cal));
system_rtc_mem_write(MEM_DELTA_ADDR, &delta, sizeof(delta));
};
diff --git a/esp8266/mpconfigport.h b/esp8266/mpconfigport.h
index c286bdcdd..483f93d02 100644
--- a/esp8266/mpconfigport.h
+++ b/esp8266/mpconfigport.h
@@ -39,6 +39,7 @@
#define MICROPY_PY_BUILTINS_SLICE (1)
#define MICROPY_PY_BUILTINS_SLICE_ATTRS (1)
#define MICROPY_PY_BUILTINS_PROPERTY (1)
+#define MICROPY_PY_BUILTINS_INPUT (1)
#define MICROPY_PY_BUILTINS_HELP (1)
#define MICROPY_PY_BUILTINS_HELP_TEXT esp_help_text
#define MICROPY_PY_BUILTINS_HELP_MODULES (1)
@@ -147,7 +148,6 @@ void *esp_native_code_commit(void*, size_t);
// extra built in names to add to the global namespace
#define MICROPY_PORT_BUILTINS \
- { MP_OBJ_NEW_QSTR(MP_QSTR_input), (mp_obj_t)&mp_builtin_input_obj }, \
{ MP_OBJ_NEW_QSTR(MP_QSTR_open), (mp_obj_t)&mp_builtin_open_obj },
// extra built in modules to add to the list of known ones
diff --git a/examples/conwaylife.py b/examples/conwaylife.py
index f99796175..323f42e85 100644
--- a/examples/conwaylife.py
+++ b/examples/conwaylife.py
@@ -8,7 +8,7 @@ lcd.light(1)
def conway_step():
for x in range(128): # loop over x coordinates
for y in range(32): # loop over y coordinates
- # count number of neigbours
+ # count number of neighbours
num_neighbours = (lcd.get(x - 1, y - 1) +
lcd.get(x, y - 1) +
lcd.get(x + 1, y - 1) +
@@ -25,7 +25,7 @@ def conway_step():
if self and not (2 <= num_neighbours <= 3):
lcd.pixel(x, y, 0) # not enough, or too many neighbours: cell dies
elif not self and num_neighbours == 3:
- lcd.pixel(x, y, 1) # exactly 3 neigbours around an empty cell: cell is born
+ lcd.pixel(x, y, 1) # exactly 3 neighbours around an empty cell: cell is born
# randomise the start
def conway_rand():
diff --git a/examples/embedding/Makefile.upylib b/examples/embedding/Makefile.upylib
index 873c0fd34..4663ad30a 100644
--- a/examples/embedding/Makefile.upylib
+++ b/examples/embedding/Makefile.upylib
@@ -170,7 +170,7 @@ SRC_QSTR_AUTO_DEPS +=
include $(MPTOP)/py/mkrules.mk
# Value of configure's --host= option (required for cross-compilation).
-# Deduce it from CROSS_COMPILE by default, but can be overriden.
+# Deduce it from CROSS_COMPILE by default, but can be overridden.
ifneq ($(CROSS_COMPILE),)
CROSS_COMPILE_HOST = --host=$(patsubst %-,%,$(CROSS_COMPILE))
else
diff --git a/examples/embedding/README.md b/examples/embedding/README.md
index 989ce1fc8..804dfede6 100644
--- a/examples/embedding/README.md
+++ b/examples/embedding/README.md
@@ -18,7 +18,7 @@ Building the example is as simple as running:
It's worth to trace what's happening behind the scenes though:
1. As a first step, a MicroPython library is built. This is handled by a
-seperate makefile, Makefile.upylib. It is more or less complex, but the
+separate makefile, Makefile.upylib. It is more or less complex, but the
good news is that you won't need to change anything in it, just use it
as is, the main Makefile shows how. What may require editing though is
a MicroPython configuration file. MicroPython is highly configurable, so
diff --git a/extmod/modlwip.c b/extmod/modlwip.c
index c72849cf9..aa93eaa27 100644
--- a/extmod/modlwip.c
+++ b/extmod/modlwip.c
@@ -373,7 +373,7 @@ STATIC err_t _lwip_tcp_recv(void *arg, struct tcp_pcb *tcpb, struct pbuf *p, err
}
/*******************************************************************************/
-// Functions for socket send/recieve operations. Socket send/recv and friends call
+// Functions for socket send/receive operations. Socket send/recv and friends call
// these to do the work.
// Helper function for send/sendto to handle UDP packets.
@@ -805,7 +805,7 @@ STATIC mp_obj_t lwip_socket_connect(mp_obj_t self_in, mp_obj_t addr_in) {
mp_raise_OSError(MP_EINPROGRESS);
}
}
- // Register our recieve callback.
+ // Register our receive callback.
tcp_recv(socket->pcb.tcp, _lwip_tcp_recv);
socket->state = STATE_CONNECTING;
err = tcp_connect(socket->pcb.tcp, &dest, port, _lwip_tcp_connected);
@@ -822,7 +822,7 @@ STATIC mp_obj_t lwip_socket_connect(mp_obj_t self_in, mp_obj_t addr_in) {
if (socket->state != STATE_CONNECTING) break;
}
if (socket->state == STATE_CONNECTING) {
- mp_raise_OSError(MP_ETIMEDOUT);
+ mp_raise_OSError(MP_EINPROGRESS);
}
} else {
while (socket->state == STATE_CONNECTING) {
diff --git a/extmod/modwebsocket.c b/extmod/modwebsocket.c
index 8200ea708..9e17d6a6d 100644
--- a/extmod/modwebsocket.c
+++ b/extmod/modwebsocket.c
@@ -132,7 +132,7 @@ STATIC mp_uint_t websocket_read(mp_obj_t self_in, void *buf, mp_uint_t size, int
self->buf_pos = 0;
self->to_recv = to_recv;
- self->msg_sz = sz; // May be overriden by FRAME_OPT
+ self->msg_sz = sz; // May be overridden by FRAME_OPT
if (to_recv != 0) {
self->state = FRAME_OPT;
} else {
diff --git a/lib/libm/sf_ldexp.c b/lib/libm/sf_ldexp.c
index 32a134eea..a0941df9f 100644
--- a/lib/libm/sf_ldexp.c
+++ b/lib/libm/sf_ldexp.c
@@ -32,7 +32,7 @@
float value; int exp;
#endif
{
- if(!finitef(value)||value==(float)0.0) return value;
+ if(!isfinite(value)||value==(float)0.0) return value;
value = scalbnf(value,exp);
//if(!finitef(value)||value==(float)0.0) errno = ERANGE;
return value;
diff --git a/lib/timeutils/timeutils.c b/lib/timeutils/timeutils.c
index 0af39a295..06915f25a 100644
--- a/lib/timeutils/timeutils.c
+++ b/lib/timeutils/timeutils.c
@@ -165,7 +165,7 @@ mp_uint_t timeutils_mktime(mp_uint_t year, mp_int_t month, mp_int_t mday,
//
// tm_tomorrow = list(time.localtime())
// tm_tomorrow[2] += 1 # Adds 1 to mday
- // tomorrow = time.mktime(tm_tommorrow)
+ // tomorrow = time.mktime(tm_tomorrow)
//
// And not have to worry about all the weird overflows.
//
diff --git a/lib/utils/interrupt_char.c b/lib/utils/interrupt_char.c
index 344db88c7..fca0f95b5 100644
--- a/lib/utils/interrupt_char.c
+++ b/lib/utils/interrupt_char.c
@@ -27,28 +27,24 @@
#include "py/obj.h"
#include "py/mpstate.h"
+#if MICROPY_KBD_EXCEPTION
+
int mp_interrupt_char;
void mp_hal_set_interrupt_char(int c) {
if (c != -1) {
- #if MICROPY_KBD_EXCEPTION
mp_obj_exception_clear_traceback(MP_OBJ_FROM_PTR(&MP_STATE_VM(mp_kbd_exception)));
- #else
- mp_obj_exception_clear_traceback(MP_STATE_PORT(mp_kbd_exception));
- #endif
}
mp_interrupt_char = c;
}
void mp_keyboard_interrupt(void) {
- #if MICROPY_KBD_EXCEPTION
MP_STATE_VM(mp_pending_exception) = MP_OBJ_FROM_PTR(&MP_STATE_VM(mp_kbd_exception));
- #else
- MP_STATE_VM(mp_pending_exception) = MP_STATE_PORT(mp_kbd_exception);
- #endif
#if MICROPY_ENABLE_SCHEDULER
if (MP_STATE_VM(sched_state) == MP_SCHED_IDLE) {
MP_STATE_VM(sched_state) = MP_SCHED_PENDING;
}
#endif
}
+
+#endif
diff --git a/lib/utils/stdout_helpers.c b/lib/utils/stdout_helpers.c
index 5f7a17d32..3de119757 100644
--- a/lib/utils/stdout_helpers.c
+++ b/lib/utils/stdout_helpers.c
@@ -9,7 +9,7 @@
* implementation below can be used.
*/
-// Send "cooked" string of given length, where every occurance of
+// Send "cooked" string of given length, where every occurrence of
// LF character is replaced with CR LF.
void mp_hal_stdout_tx_strn_cooked(const char *str, size_t len) {
while (len--) {
diff --git a/py/asmthumb.c b/py/asmthumb.c
index 749c1e405..7e92e4de4 100644
--- a/py/asmthumb.c
+++ b/py/asmthumb.c
@@ -52,7 +52,7 @@ void asm_thumb_end_pass(asm_thumb_t *as) {
#if defined(MCU_SERIES_F7)
if (as->base.pass == MP_ASM_PASS_EMIT) {
- // flush D-cache, so the code emited is stored in memory
+ // flush D-cache, so the code emitted is stored in memory
SCB_CleanDCache_by_Addr((uint32_t*)as->base.code_base, as->base.code_size);
// invalidate I-cache
SCB_InvalidateICache();
diff --git a/py/builtinimport.c b/py/builtinimport.c
index d01ebbe73..6994fc48f 100644
--- a/py/builtinimport.c
+++ b/py/builtinimport.c
@@ -271,7 +271,7 @@ mp_obj_t mp_builtin___import__(size_t n_args, const mp_obj_t *args) {
if (level != 0) {
// What we want to do here is to take name of current module,
// chop <level> trailing components, and concatenate with passed-in
- // module name, thus resolving relative import name into absolue.
+ // module name, thus resolving relative import name into absolute.
// This even appears to be correct per
// http://legacy.python.org/dev/peps/pep-0328/#relative-imports-and-name
// "Relative imports use a module's __name__ attribute to determine that
@@ -441,7 +441,7 @@ mp_obj_t mp_builtin___import__(size_t n_args, const mp_obj_t *args) {
#if MICROPY_CPYTHON_COMPAT
// Store module as "__main__" in the dictionary of loaded modules (returned by sys.modules).
mp_obj_dict_store(MP_OBJ_FROM_PTR(&MP_STATE_VM(mp_loaded_modules_dict)), MP_OBJ_NEW_QSTR(MP_QSTR___main__), module_obj);
- // Store real name in "__main__" attribute. Choosen semi-randonly, to reuse existing qstr's.
+ // Store real name in "__main__" attribute. Chosen semi-randonly, to reuse existing qstr's.
mp_obj_dict_store(MP_OBJ_FROM_PTR(o->globals), MP_OBJ_NEW_QSTR(MP_QSTR___main__), MP_OBJ_NEW_QSTR(mod_name));
#endif
}
diff --git a/py/compile.c b/py/compile.c
index 8533e0528..3b6a264d6 100644
--- a/py/compile.c
+++ b/py/compile.c
@@ -939,7 +939,7 @@ STATIC void c_del_stmt(compiler_t *comp, mp_parse_node_t pn) {
}
}
} else {
- // some arbitrary statment that we can't delete (eg del 1)
+ // some arbitrary statement that we can't delete (eg del 1)
goto cannot_delete;
}
@@ -1090,7 +1090,7 @@ STATIC void compile_import_name(compiler_t *comp, mp_parse_node_struct_t *pns) {
STATIC void compile_import_from(compiler_t *comp, mp_parse_node_struct_t *pns) {
mp_parse_node_t pn_import_source = pns->nodes[0];
- // extract the preceeding .'s (if any) for a relative import, to compute the import level
+ // extract the preceding .'s (if any) for a relative import, to compute the import level
uint import_level = 0;
do {
mp_parse_node_t pn_rel;
diff --git a/py/misc.h b/py/misc.h
index 146b9a8e4..caa5945bf 100644
--- a/py/misc.h
+++ b/py/misc.h
@@ -197,7 +197,7 @@ int DEBUG_printf(const char *fmt, ...);
extern mp_uint_t mp_verbose_flag;
// This is useful for unicode handling. Some CPU archs has
-// special instructions for efficient implentation of this
+// special instructions for efficient implementation of this
// function (e.g. CLZ on ARM).
// NOTE: this function is unused at the moment
#ifndef count_lead_ones
diff --git a/py/mkenv.mk b/py/mkenv.mk
index eb1e44fef..b167b2533 100644
--- a/py/mkenv.mk
+++ b/py/mkenv.mk
@@ -32,7 +32,7 @@ ifeq ($(BUILD_VERBOSE),0)
$(info Use make V=1 or set BUILD_VERBOSE in your environment to increase build verbosity.)
endif
-# default settings; can be overriden in main Makefile
+# default settings; can be overridden in main Makefile
PY_SRC ?= $(TOP)/py
BUILD ?= build
diff --git a/py/modbuiltins.c b/py/modbuiltins.c
index 17bd30c52..fe8159953 100644
--- a/py/modbuiltins.c
+++ b/py/modbuiltins.c
@@ -259,6 +259,35 @@ STATIC mp_obj_t mp_builtin_hex(mp_obj_t o_in) {
}
MP_DEFINE_CONST_FUN_OBJ_1(mp_builtin_hex_obj, mp_builtin_hex);
+#if MICROPY_PY_BUILTINS_INPUT
+
+#include "py/mphal.h"
+#include "lib/mp-readline/readline.h"
+
+// A port can define mp_hal_readline if they want to use a custom function here
+#ifndef mp_hal_readline
+#define mp_hal_readline readline
+#endif
+
+STATIC mp_obj_t mp_builtin_input(size_t n_args, const mp_obj_t *args) {
+ if (n_args == 1) {
+ mp_obj_print(args[0], PRINT_STR);
+ }
+ vstr_t line;
+ vstr_init(&line, 16);
+ int ret = mp_hal_readline(&line, "");
+ if (ret == CHAR_CTRL_C) {
+ nlr_raise(mp_obj_new_exception(&mp_type_KeyboardInterrupt));
+ }
+ if (line.len == 0 && ret == CHAR_CTRL_D) {
+ nlr_raise(mp_obj_new_exception(&mp_type_EOFError));
+ }
+ return mp_obj_new_str_from_vstr(&mp_type_str, &line);
+}
+MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mp_builtin_input_obj, 0, 1, mp_builtin_input);
+
+#endif
+
STATIC mp_obj_t mp_builtin_iter(mp_obj_t o_in) {
return mp_getiter(o_in, NULL);
}
@@ -676,6 +705,9 @@ STATIC const mp_rom_map_elem_t mp_module_builtins_globals_table[] = {
#endif
{ MP_ROM_QSTR(MP_QSTR_hex), MP_ROM_PTR(&mp_builtin_hex_obj) },
{ MP_ROM_QSTR(MP_QSTR_id), MP_ROM_PTR(&mp_builtin_id_obj) },
+ #if MICROPY_PY_BUILTINS_INPUT
+ { MP_ROM_QSTR(MP_QSTR_input), MP_ROM_PTR(&mp_builtin_input_obj) },
+ #endif
{ MP_ROM_QSTR(MP_QSTR_isinstance), MP_ROM_PTR(&mp_builtin_isinstance_obj) },
{ MP_ROM_QSTR(MP_QSTR_issubclass), MP_ROM_PTR(&mp_builtin_issubclass_obj) },
{ MP_ROM_QSTR(MP_QSTR_iter), MP_ROM_PTR(&mp_builtin_iter_obj) },
diff --git a/py/mpconfig.h b/py/mpconfig.h
index a61d431e5..1ec8ae21c 100644
--- a/py/mpconfig.h
+++ b/py/mpconfig.h
@@ -32,7 +32,7 @@
// mpconfigport.h is a file containing configuration settings for a
// particular port. mpconfigport.h is actually a default name for
-// such config, and it can be overriden using MP_CONFIGFILE preprocessor
+// such config, and it can be overridden using MP_CONFIGFILE preprocessor
// define (you can do that by passing CFLAGS_EXTRA='-DMP_CONFIGFILE="<file.h>"'
// argument to make when using standard MicroPython makefiles).
// This is useful to have more than one config per port, for example,
@@ -791,6 +791,12 @@ typedef double mp_float_t;
#define MICROPY_PY_BUILTINS_NOTIMPLEMENTED (0)
#endif
+// Whether to provide the built-in input() function. The implementation of this
+// uses mp-readline, so can only be enabled if the port uses this readline.
+#ifndef MICROPY_PY_BUILTINS_INPUT
+#define MICROPY_PY_BUILTINS_INPUT (0)
+#endif
+
// Whether to support min/max functions
#ifndef MICROPY_PY_BUILTINS_MIN_MAX
#define MICROPY_PY_BUILTINS_MIN_MAX (1)
diff --git a/py/obj.c b/py/obj.c
index 98ffa930b..493945a22 100644
--- a/py/obj.c
+++ b/py/obj.c
@@ -401,7 +401,7 @@ mp_obj_t mp_obj_id(mp_obj_t o_in) {
return MP_OBJ_NEW_SMALL_INT(id);
} else {
// If that didn't work, well, let's return long int, just as
- // a (big) positve value, so it will never clash with the range
+ // a (big) positive value, so it will never clash with the range
// of small int returned in previous case.
return mp_obj_new_int_from_uint((mp_uint_t)id);
}
diff --git a/py/objstr.c b/py/objstr.c
index 70de0a693..1d2a28045 100644
--- a/py/objstr.c
+++ b/py/objstr.c
@@ -602,6 +602,11 @@ STATIC mp_obj_t str_rsplit(size_t n_args, const mp_obj_t *args) {
GET_STR_DATA_LEN(args[0], s, len);
mp_int_t splits = mp_obj_get_int(args[2]);
+ if (splits < 0) {
+ // Negative limit means no limit, so delegate to split().
+ return mp_obj_str_split(n_args, args);
+ }
+
mp_int_t org_splits = splits;
// Preallocate list to the max expected # of elements, as we
// will fill it from the end.
@@ -798,7 +803,7 @@ STATIC mp_obj_t str_uni_strip(int type, size_t n_args, const mp_obj_t *args) {
}
assert(last_good_char_pos >= first_good_char_pos);
- //+1 to accomodate the last character
+ //+1 to accommodate the last character
size_t stripped_len = last_good_char_pos - first_good_char_pos + 1;
if (stripped_len == orig_str_len) {
// If nothing was stripped, don't bother to dup original string
@@ -1811,7 +1816,7 @@ STATIC mp_obj_t str_islower(mp_obj_t self_in) {
}
#if MICROPY_CPYTHON_COMPAT
-// These methods are superfluous in the presense of str() and bytes()
+// These methods are superfluous in the presence of str() and bytes()
// constructors.
// TODO: should accept kwargs too
STATIC mp_obj_t bytes_decode(size_t n_args, const mp_obj_t *args) {
diff --git a/py/py.mk b/py/py.mk
index 5ff1fd6a6..70891677d 100644
--- a/py/py.mk
+++ b/py/py.mk
@@ -25,7 +25,7 @@ ifeq ($(MICROPY_SSL_AXTLS),1)
CFLAGS_MOD += -DMICROPY_SSL_AXTLS=1 -I../lib/axtls/ssl -I../lib/axtls/crypto -I../lib/axtls/config
LDFLAGS_MOD += -Lbuild -laxtls
else ifeq ($(MICROPY_SSL_MBEDTLS),1)
-# Can be overriden by ports which have "builtin" mbedTLS
+# Can be overridden by ports which have "builtin" mbedTLS
MICROPY_SSL_MBEDTLS_INCLUDE ?= ../lib/mbedtls/include
CFLAGS_MOD += -DMICROPY_SSL_MBEDTLS=1 -I$(MICROPY_SSL_MBEDTLS_INCLUDE)
LDFLAGS_MOD += -L../lib/mbedtls/library -lmbedx509 -lmbedtls -lmbedcrypto
diff --git a/py/ringbuf.h b/py/ringbuf.h
index 5662594f7..5e108afad 100644
--- a/py/ringbuf.h
+++ b/py/ringbuf.h
@@ -33,7 +33,7 @@ typedef struct _ringbuf_t {
uint16_t iput;
} ringbuf_t;
-// Static initalization:
+// Static initialization:
// byte buf_array[N];
// ringbuf_t buf = {buf_array, sizeof(buf_array)};
diff --git a/py/stream.c b/py/stream.c
index c915110e0..d3fc767bb 100644
--- a/py/stream.c
+++ b/py/stream.c
@@ -51,7 +51,7 @@ STATIC mp_obj_t stream_readall(mp_obj_t self_in);
#define STREAM_CONTENT_TYPE(stream) (((stream)->is_text) ? &mp_type_str : &mp_type_bytes)
// Returns error condition in *errcode, if non-zero, return value is number of bytes written
-// before error condition occured. If *errcode == 0, returns total bytes written (which will
+// before error condition occurred. If *errcode == 0, returns total bytes written (which will
// be equal to input size).
mp_uint_t mp_stream_rw(mp_obj_t stream, void *buf_, mp_uint_t size, int *errcode, byte flags) {
byte *buf = buf_;
diff --git a/py/vm.c b/py/vm.c
index 5094e3e45..ad3d9e29c 100644
--- a/py/vm.c
+++ b/py/vm.c
@@ -947,7 +947,7 @@ unwind_jump:;
DECODE_UINT;
// unum & 0xff == n_positional
// (unum >> 8) & 0xff == n_keyword
- // We have folowing stack layout here:
+ // We have following stack layout here:
// fun arg0 arg1 ... kw0 val0 kw1 val1 ... seq dict <- TOS
sp -= (unum & 0xff) + ((unum >> 7) & 0x1fe) + 2;
#if MICROPY_STACKLESS
@@ -1018,7 +1018,7 @@ unwind_jump:;
DECODE_UINT;
// unum & 0xff == n_positional
// (unum >> 8) & 0xff == n_keyword
- // We have folowing stack layout here:
+ // We have following stack layout here:
// fun self arg0 arg1 ... kw0 val0 kw1 val1 ... seq dict <- TOS
sp -= (unum & 0xff) + ((unum >> 7) & 0x1fe) + 3;
#if MICROPY_STACKLESS
diff --git a/qemu-arm/README.md b/qemu-arm/README.md
index 329ae4d92..0cf93c7d5 100644
--- a/qemu-arm/README.md
+++ b/qemu-arm/README.md
@@ -4,7 +4,7 @@ provided by QEMU (http://qemu.org).
The purposes of this port are to enable:
1. Continuous integration
- - run tests agains architecture-specific parts of code base
+ - run tests against architecture-specific parts of code base
2. Experimentation
- simulation & prototyping of anything that has architecture-specific
code
diff --git a/stmhal/Makefile b/stmhal/Makefile
index 09643be94..2d9d44afd 100644
--- a/stmhal/Makefile
+++ b/stmhal/Makefile
@@ -147,7 +147,6 @@ SRC_C = \
gccollect.c \
pybstdio.c \
help.c \
- input.c \
machine_i2c.c \
modmachine.c \
modpyb.c \
diff --git a/stmhal/boards/NUCLEO_F767ZI/mpconfigboard.h b/stmhal/boards/NUCLEO_F767ZI/mpconfigboard.h
index cafea136f..8952bce82 100644
--- a/stmhal/boards/NUCLEO_F767ZI/mpconfigboard.h
+++ b/stmhal/boards/NUCLEO_F767ZI/mpconfigboard.h
@@ -16,7 +16,7 @@
#define MICROPY_HW_ENABLE_RTC (1)
#define MICROPY_HW_ENABLE_TIMER (1)
#define MICROPY_HW_ENABLE_SERVO (0)
-#define MICROPY_HW_ENABLE_DAC (0)
+#define MICROPY_HW_ENABLE_DAC (1)
#define MICROPY_HW_ENABLE_CAN (1)
// HSE is 25MHz
diff --git a/stmhal/boards/NUCLEO_F767ZI/stm32f7xx_hal_conf.h b/stmhal/boards/NUCLEO_F767ZI/stm32f7xx_hal_conf.h
index d2c31cb09..e1aa4578d 100644
--- a/stmhal/boards/NUCLEO_F767ZI/stm32f7xx_hal_conf.h
+++ b/stmhal/boards/NUCLEO_F767ZI/stm32f7xx_hal_conf.h
@@ -58,7 +58,7 @@
/* #define HAL_CEC_MODULE_ENABLED */
/* #define HAL_CRC_MODULE_ENABLED */
/* #define HAL_CRYP_MODULE_ENABLED */
-/* #define HAL_DAC_MODULE_ENABLED */
+#define HAL_DAC_MODULE_ENABLED
/* #define HAL_DCMI_MODULE_ENABLED */
#define HAL_DMA_MODULE_ENABLED
/* #define HAL_DMA2D_MODULE_ENABLED */
diff --git a/stmhal/input.c b/stmhal/input.c
deleted file mode 100644
index c78525cc9..000000000
--- a/stmhal/input.c
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * This file is part of the Micro Python project, http://micropython.org/
- *
- * The MIT License (MIT)
- *
- * Copyright (c) 2013, 2014 Damien P. George
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-#include "py/nlr.h"
-#include "py/obj.h"
-#include "lib/mp-readline/readline.h"
-
-STATIC mp_obj_t mp_builtin_input(uint n_args, const mp_obj_t *args) {
- if (n_args == 1) {
- mp_obj_print(args[0], PRINT_STR);
- }
- vstr_t line;
- vstr_init(&line, 16);
- int ret = readline(&line, "");
- if (line.len == 0 && ret == CHAR_CTRL_D) {
- nlr_raise(mp_obj_new_exception(&mp_type_EOFError));
- }
- return mp_obj_new_str_from_vstr(&mp_type_str, &line);
-}
-
-MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mp_builtin_input_obj, 0, 1, mp_builtin_input);
diff --git a/stmhal/mpconfigport.h b/stmhal/mpconfigport.h
index 444ce9303..ac3c1f247 100644
--- a/stmhal/mpconfigport.h
+++ b/stmhal/mpconfigport.h
@@ -87,6 +87,7 @@
#define MICROPY_PY_ALL_SPECIAL_METHODS (1)
#define MICROPY_PY_BUILTINS_COMPILE (1)
#define MICROPY_PY_BUILTINS_EXECFILE (1)
+#define MICROPY_PY_BUILTINS_INPUT (1)
#define MICROPY_PY_BUILTINS_POW3 (1)
#define MICROPY_PY_BUILTINS_HELP (1)
#define MICROPY_PY_BUILTINS_HELP_TEXT stmhal_help_text
@@ -159,7 +160,6 @@
// extra built in names to add to the global namespace
#define MICROPY_PORT_BUILTINS \
- { MP_OBJ_NEW_QSTR(MP_QSTR_input), (mp_obj_t)&mp_builtin_input_obj }, \
{ MP_OBJ_NEW_QSTR(MP_QSTR_open), (mp_obj_t)&mp_builtin_open_obj },
// extra built in modules to add to the list of known ones
diff --git a/teensy/Makefile b/teensy/Makefile
index 9f52cc3c7..923ea77ec 100644
--- a/teensy/Makefile
+++ b/teensy/Makefile
@@ -93,7 +93,6 @@ SRC_C = \
STM_SRC_C = $(addprefix stmhal/,\
gccollect.c \
- input.c \
irq.c \
pin.c \
pin_named_pins.c \
diff --git a/teensy/mpconfigport.h b/teensy/mpconfigport.h
index 8c4022046..de30924d9 100644
--- a/teensy/mpconfigport.h
+++ b/teensy/mpconfigport.h
@@ -14,6 +14,7 @@
#define MICROPY_FLOAT_IMPL (MICROPY_FLOAT_IMPL_FLOAT)
#define MICROPY_OPT_COMPUTED_GOTO (1)
+#define MICROPY_PY_BUILTINS_INPUT (1)
#define MICROPY_PY_BUILTINS_HELP (1)
#define MICROPY_PY_BUILTINS_HELP_TEXT teensy_help_text
@@ -31,7 +32,6 @@
// extra built in names to add to the global namespace
#define MICROPY_PORT_BUILTINS \
- { MP_OBJ_NEW_QSTR(MP_QSTR_input), (mp_obj_t)&mp_builtin_input_obj }, \
// extra built in modules to add to the list of known ones
extern const struct _mp_obj_module_t os_module;
diff --git a/tests/basics/namedtuple1.py b/tests/basics/namedtuple1.py
index 132dcf96b..70372f7ca 100644
--- a/tests/basics/namedtuple1.py
+++ b/tests/basics/namedtuple1.py
@@ -76,7 +76,7 @@ T4 = namedtuple("TupTuple", ("foo", "bar"))
t = T4(1, 2)
print(t.foo, t.bar)
-# Try single string with comma field seperator
+# Try single string with comma field separator
# Not implemented so far
#T2 = namedtuple("TupComma", "foo,bar")
#t = T2(1, 2)
diff --git a/tests/basics/string_rsplit.py b/tests/basics/string_rsplit.py
index 563b64f1c..b92b8f359 100644
--- a/tests/basics/string_rsplit.py
+++ b/tests/basics/string_rsplit.py
@@ -52,3 +52,7 @@ print("/*10/*11/*12/*".rsplit("/*", 4))
print("/*10/*11/*12/*".rsplit("/*", 5))
print(b"abcabc".rsplit(b"bc", 2))
+
+# negative "maxsplit" should delegate to .split()
+print('abaca'.rsplit('a', -1))
+print('abaca'.rsplit('a', -2))
diff --git a/tests/basics/try_reraise2.py b/tests/basics/try_reraise2.py
index d9434397c..5648d2467 100644
--- a/tests/basics/try_reraise2.py
+++ b/tests/basics/try_reraise2.py
@@ -1,4 +1,4 @@
-# Reraise not the latest occured exception
+# Reraise not the latest occurred exception
def f():
try:
raise ValueError("val", 3)
diff --git a/tests/pyb/can.py b/tests/pyb/can.py
index 617eb7ccc..7f2d070ec 100644
--- a/tests/pyb/can.py
+++ b/tests/pyb/can.py
@@ -158,7 +158,7 @@ print(can.recv(1))
del can
-# Testing asyncronous send
+# Testing asynchronous send
can = CAN(1, CAN.LOOPBACK)
can.setfilter(0, CAN.MASK16, 0, (0, 0, 0, 0))
diff --git a/tests/thread/stress_aes.py b/tests/thread/stress_aes.py
index ecc963c92..df75e616c 100644
--- a/tests/thread/stress_aes.py
+++ b/tests/thread/stress_aes.py
@@ -8,7 +8,7 @@
#
# The AES code comes first (code originates from a C version authored by D.P.George)
# and then the test harness at the bottom. It can be tuned to be more/less
-# agressive by changing the amount of data to encrypt, the number of loops and
+# aggressive by changing the amount of data to encrypt, the number of loops and
# the number of threads.
#
# MIT license; Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd
diff --git a/tests/wipy/uart.py b/tests/wipy/uart.py
index a3a1c14e8..8e794015d 100644
--- a/tests/wipy/uart.py
+++ b/tests/wipy/uart.py
@@ -95,7 +95,7 @@ print(uart1.read() == None)
print(uart1.write(b'123') == 3)
print(uart0.read() == b'123')
-# no pin assignemnt
+# no pin assignment
uart0 = UART(0, 1000000, pins=(None, None))
print(uart0.write(b'123456789') == 9)
print(uart1.read() == None)
diff --git a/tools/insert-usb-ids.py b/tools/insert-usb-ids.py
index 420db34c5..cdccd3be9 100644
--- a/tools/insert-usb-ids.py
+++ b/tools/insert-usb-ids.py
@@ -1,4 +1,4 @@
-# Reads the USB VID and PID from the file specifed by sys.arg[1] and then
+# Reads the USB VID and PID from the file specified by sys.argv[1] and then
# inserts those values into the template file specified by sys.argv[2],
# printing the result to stdout
diff --git a/tools/pyboard.py b/tools/pyboard.py
index 5eac030bd..921ffc52d 100755
--- a/tools/pyboard.py
+++ b/tools/pyboard.py
@@ -69,7 +69,7 @@ class TelnetToSerial:
self.tn.write(bytes(password, 'ascii') + b"\r\n")
if b'for more information.' in self.tn.read_until(b'Type "help()" for more information.', timeout=read_timeout):
- # login succesful
+ # login successful
from collections import deque
self.fifo = deque()
return
diff --git a/unix/Makefile b/unix/Makefile
index 837ddf2b7..006bce0ef 100644
--- a/unix/Makefile
+++ b/unix/Makefile
@@ -262,7 +262,7 @@ coverage_test: coverage
gcov -o build-coverage/extmod ../extmod/*.c
# Value of configure's --host= option (required for cross-compilation).
-# Deduce it from CROSS_COMPILE by default, but can be overriden.
+# Deduce it from CROSS_COMPILE by default, but can be overridden.
ifneq ($(CROSS_COMPILE),)
CROSS_COMPILE_HOST = --host=$(patsubst %-,%,$(CROSS_COMPILE))
else
diff --git a/unix/input.c b/unix/input.c
index 7cd527fed..4b10350df 100644
--- a/unix/input.c
+++ b/unix/input.c
@@ -37,32 +37,8 @@
#include "lib/mp-readline/readline.h"
#endif
+#if MICROPY_USE_READLINE == 0
char *prompt(char *p) {
-#if MICROPY_USE_READLINE == 1
- // MicroPython supplied readline
- vstr_t vstr;
- vstr_init(&vstr, 16);
- mp_hal_stdio_mode_raw();
- int ret = readline(&vstr, p);
- mp_hal_stdio_mode_orig();
- if (ret != 0) {
- vstr_clear(&vstr);
- if (ret == CHAR_CTRL_D) {
- // EOF
- printf("\n");
- return NULL;
- } else {
- printf("\n");
- char *line = malloc(1);
- line[0] = '\0';
- return line;
- }
- }
- vstr_null_terminated_str(&vstr);
- char *line = malloc(vstr.len + 1);
- memcpy(line, vstr.buf, vstr.len + 1);
- vstr_clear(&vstr);
-#else
// simple read string
static char buf[256];
fputs(p, stdout);
@@ -78,9 +54,9 @@ char *prompt(char *p) {
}
char *line = malloc(l);
memcpy(line, buf, l);
-#endif
return line;
}
+#endif
void prompt_read_history(void) {
#if MICROPY_USE_READLINE_HISTORY
@@ -143,18 +119,3 @@ void prompt_write_history(void) {
#endif
#endif
}
-
-STATIC mp_obj_t mp_builtin_input(size_t n_args, const mp_obj_t *args) {
- if (n_args == 1) {
- mp_obj_print(args[0], PRINT_STR);
- }
-
- char *line = prompt("");
- if (line == NULL) {
- nlr_raise(mp_obj_new_exception(&mp_type_EOFError));
- }
- mp_obj_t o = mp_obj_new_str(line, strlen(line), false);
- free(line);
- return o;
-}
-MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mp_builtin_input_obj, 0, 1, mp_builtin_input);
diff --git a/unix/modsocket.c b/unix/modsocket.c
index 9ca04b88b..c7be6461e 100644
--- a/unix/modsocket.c
+++ b/unix/modsocket.c
@@ -58,7 +58,7 @@
from socket_more_funcs2 import *
-------------------
I.e. this module should stay lean, and more functions (if needed)
- should be add to seperate modules (C or Python level).
+ should be add to separate modules (C or Python level).
*/
#define MICROPY_SOCKET_EXTRA (0)
diff --git a/unix/mpconfigport.h b/unix/mpconfigport.h
index d8b8e9d1e..047121fe6 100644
--- a/unix/mpconfigport.h
+++ b/unix/mpconfigport.h
@@ -81,6 +81,7 @@
#define MICROPY_PY_BUILTINS_FROZENSET (1)
#define MICROPY_PY_BUILTINS_COMPILE (1)
#define MICROPY_PY_BUILTINS_NOTIMPLEMENTED (1)
+#define MICROPY_PY_BUILTINS_INPUT (1)
#define MICROPY_PY_BUILTINS_POW3 (1)
#define MICROPY_PY_MICROPYTHON_MEM_INFO (1)
#define MICROPY_PY_ALL_SPECIAL_METHODS (1)
@@ -279,7 +280,6 @@ void mp_unix_mark_exec(void);
#endif
#define MICROPY_PORT_BUILTINS \
- { MP_ROM_QSTR(MP_QSTR_input), MP_ROM_PTR(&mp_builtin_input_obj) }, \
{ MP_ROM_QSTR(MP_QSTR_open), MP_ROM_PTR(&mp_builtin_open_obj) },
#define MP_STATE_PORT MP_STATE_VM
diff --git a/unix/mphalport.h b/unix/mphalport.h
index 00e79ec17..cf227872f 100644
--- a/unix/mphalport.h
+++ b/unix/mphalport.h
@@ -34,6 +34,19 @@ void mp_hal_set_interrupt_char(char c);
void mp_hal_stdio_mode_raw(void);
void mp_hal_stdio_mode_orig(void);
+#if MICROPY_USE_READLINE == 1 && MICROPY_PY_BUILTINS_INPUT
+#include "py/misc.h"
+#include "lib/mp-readline/readline.h"
+// For built-in input() we need to wrap the standard readline() to enable raw mode
+#define mp_hal_readline mp_hal_readline
+static inline int mp_hal_readline(vstr_t *vstr, const char *p) {
+ mp_hal_stdio_mode_raw();
+ int ret = readline(vstr, p);
+ mp_hal_stdio_mode_orig();
+ return ret;
+}
+#endif
+
// TODO: POSIX et al. define usleep() as guaranteedly capable only of 1s sleep:
// "The useconds argument shall be less than one million."
static inline void mp_hal_delay_ms(mp_uint_t ms) { usleep((ms) * 1000); }
diff --git a/windows/mpconfigport.h b/windows/mpconfigport.h
index 8cef50671..f2f6cbd32 100644
--- a/windows/mpconfigport.h
+++ b/windows/mpconfigport.h
@@ -69,6 +69,7 @@
#define MICROPY_PY_BUILTINS_FROZENSET (1)
#define MICROPY_PY_BUILTINS_COMPILE (1)
#define MICROPY_PY_BUILTINS_NOTIMPLEMENTED (1)
+#define MICROPY_PY_BUILTINS_INPUT (1)
#define MICROPY_PY_BUILTINS_POW3 (1)
#define MICROPY_PY_MICROPYTHON_MEM_INFO (1)
#define MICROPY_PY_ALL_SPECIAL_METHODS (1)
@@ -163,7 +164,6 @@ void mp_hal_dupterm_tx_strn(const char *str, size_t len);
#endif
#define MICROPY_PORT_BUILTINS \
- { MP_OBJ_NEW_QSTR(MP_QSTR_input), (mp_obj_t)&mp_builtin_input_obj }, \
{ MP_OBJ_NEW_QSTR(MP_QSTR_open), (mp_obj_t)&mp_builtin_open_obj },
extern const struct _mp_obj_module_t mp_module_os;
diff --git a/windows/windows_mphal.c b/windows/windows_mphal.c
index 1dd3105d8..a73140e54 100644
--- a/windows/windows_mphal.c
+++ b/windows/windows_mphal.c
@@ -72,7 +72,7 @@ void mp_hal_stdio_mode_orig(void) {
// Previous versions of the mp_hal code would install a handler whenever Ctrl-C input is
// allowed and remove the handler again when it is not. That is not necessary though (1),
// and it might introduce problems (2) because console notifications are delivered to the
-// application in a seperate thread.
+// application in a separate thread.
// (1) mp_hal_set_interrupt_char effectively enables/disables processing of Ctrl-C via the
// ENABLE_PROCESSED_INPUT flag so in raw mode console_sighandler won't be called.
// (2) if mp_hal_set_interrupt_char would remove the handler while Ctrl-C was issued earlier,
diff --git a/zephyr/modusocket.c b/zephyr/modusocket.c
index 0a54ea576..cec0eec7c 100644
--- a/zephyr/modusocket.c
+++ b/zephyr/modusocket.c
@@ -587,7 +587,8 @@ STATIC mp_obj_t mod_getaddrinfo(size_t n_args, const mp_obj_t *args) {
// Raise error only if there's nothing to return, otherwise
// it may be IPv4 vs IPv6 differences.
- if (state.status != 0 && mp_obj_len(state.result) == 0) {
+ mp_int_t len = MP_OBJ_SMALL_INT_VALUE(mp_obj_len(state.result));
+ if (state.status != 0 && len == 0) {
mp_raise_OSError(state.status);
}
diff --git a/zephyr/modutime.c b/zephyr/modutime.c
index 378068bb3..0c268046a 100644
--- a/zephyr/modutime.c
+++ b/zephyr/modutime.c
@@ -36,7 +36,7 @@
#include "extmod/utime_mphal.h"
STATIC mp_obj_t mod_time_time(void) {
- /* The absense of FP support is deliberate. The Zephyr port uses
+ /* The absence of FP support is deliberate. The Zephyr port uses
* single precision floats so the fraction component will start to
* lose precision on devices with a long uptime.
*/