summaryrefslogtreecommitdiffstatshomepage
path: root/docs
diff options
context:
space:
mode:
Diffstat (limited to 'docs')
-rw-r--r--docs/README.md12
-rwxr-xr-xdocs/conf.py2
-rw-r--r--docs/esp8266/general.rst33
-rw-r--r--docs/esp8266/img/adafruit_products_pinoutstop.jpgbin0 -> 79455 bytes
-rw-r--r--docs/esp8266/quickref.rst51
-rw-r--r--docs/esp8266/tutorial/network_basics.rst2
-rw-r--r--docs/esp8266/tutorial/network_tcp.rst2
-rw-r--r--docs/library/cmath.rst5
-rw-r--r--docs/library/index.rst31
-rw-r--r--docs/library/machine.UART.rst36
-rw-r--r--docs/library/machine.rst41
-rw-r--r--docs/library/math.rst5
-rw-r--r--docs/library/pyb.DAC.rst4
-rw-r--r--docs/library/ussl.rst99
-rw-r--r--docs/library/ustruct.rst6
-rw-r--r--docs/wipy/tutorial/repl.rst7
16 files changed, 232 insertions, 104 deletions
diff --git a/docs/README.md b/docs/README.md
index c594030999..2602a15225 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -26,3 +26,15 @@ In `micropython/docs`, build the docs:
Where `<port_name>` can be `unix`, `pyboard`, `wipy` or `esp8266`.
You'll find the index page at `micropython/docs/build/<port_name>/html/index.html`.
+
+PDF manual generation
+---------------------
+
+This can be achieved with:
+
+ make MICROPY_PORT=<port_name> latexpdf
+
+but require rather complete install of LaTeX with various extensions. On
+Debiab/Ubuntu, try (500MB+ download):
+
+ apt-get install texlive-latex-recommended texlive-latex-extra
diff --git a/docs/conf.py b/docs/conf.py
index 9163e04c79..6faeb60406 100755
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -93,7 +93,7 @@ copyright = '2014-2016, Damien P. George and contributors'
# The short X.Y version.
version = '1.8'
# The full version, including alpha/beta/rc tags.
-release = '1.8'
+release = '1.8.1'
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
diff --git a/docs/esp8266/general.rst b/docs/esp8266/general.rst
index f996068d09..313e6074c1 100644
--- a/docs/esp8266/general.rst
+++ b/docs/esp8266/general.rst
@@ -6,8 +6,8 @@ ESP8266 is a popular WiFi-enabled System-on-Chip (SoC) by Espressif Systems.
Multitude of boards
-------------------
-There are multitude of modules and boards from different sources which carry
-ESP8266 chip. MicroPython tries to provide a generic port which would run on
+There are a multitude of modules and boards from different sources which carry
+the ESP8266 chip. MicroPython tries to provide a generic port which would run on
as many boards/modules as possible, but there may be limitations. Adafruit
Feather HUZZAH board is taken as a reference board for the port (for example,
testing is performed on it). If you have another board, please make sure you
@@ -18,13 +18,13 @@ To make a generic ESP8266 port and support as many boards as possible,
following design and implementation decision were made:
* GPIO pin numbering is based on ESP8266 chip numbering, not some "logical"
- numbering of a particular board. Please have manual/pin diagram of your board
- handy to find correspondce between your board pins and actual ESP8266 pins.
+ numbering of a particular board. Please have the manual/pin diagram of your board
+ at hand to find correspondence between your board pins and actual ESP8266 pins.
We also encourage users of various boards to share this mapping via MicroPython
forum, with the idea to collect community-maintained reference materials
eventually.
* All pins which make sense to support, are supported by MicroPython
- (for example, we don't expose pins which are used to connect SPI flash
+ (for example, pins which are used to connect SPI flash
are not exposed, as they're unlikely useful for anything else, and
operating on them will lead to board lock-up). However, any particular
board may expose only subset of pins. Consult your board reference manual.
@@ -37,10 +37,10 @@ Technical specifications and SoC datasheets
The datasheets and other reference material for ESP8266 chip are available
from the vendor site: http://bbs.espressif.com/viewtopic.php?f=67&t=225 .
-The are primary reference for the chip technical specifications, capabilities,
+They are the primary reference for the chip technical specifications, capabilities,
operating modes, internal functioning, etc.
-For your convinience, some of technical specifications are provided below:
+For your convenience, some of technical specifications are provided below:
* Architecture: Xtensa lx106
* CPU frequency: 80MHz overclockable to 160MHz
@@ -64,18 +64,18 @@ Boot process
On boot, MicroPython EPS8266 port executes ``_boot.py`` script from internal
frozen modules. It mounts filesystem in FlashROM, or if it's not available,
performs first-time setup of the module and creates the filesystem. This
-part of boot process is considered fixed, and not available for customization
+part of the boot process is considered fixed, and not available for customization
for end users (even if you build from source, please refrain from changes to
it; customization of early boot process is available only to advanced users
and developers, who can diagnose themselves any issues arising from
modifying the standard process).
-Once filesystem is mounted, ``boot.py`` is executed from it. The standard
+Once the filesystem is mounted, ``boot.py`` is executed from it. The standard
version of this file is created during first-time module set up and by
-defaults starts up a WebREPL daemon to handle incoming connections. This
+default starts up a WebREPL daemon to handle incoming connections. This
file is customizable by end users (for example, you may want to disable
WebREPL for extra security, or add other services which should be run on
-module start-up). But keep in mind that incorrect modifications to boot.py
+a module start-up). But keep in mind that incorrect modifications to boot.py
may still lead to boot loops or lock ups, requiring to reflash a module
from scratch.
@@ -89,5 +89,14 @@ the following in ``main.py``::
import my_app
my_app.main()
-This will allow to keep structure of your application clear, as well as
+This will allow to keep the structure of your application clear, as well as
allow to install multiple applications on a board, and switch among them.
+
+
+Real-time clock
+---------------
+
+Due to limitations of the ESP8266 chip the internal real-time clock (RTC)
+will overflow every 7:45h. If a long-term working RTC time is required then
+``time()`` or ``localtime()`` must be called at least once within 7 hours.
+MicroPython will then handle the overflow.
diff --git a/docs/esp8266/img/adafruit_products_pinoutstop.jpg b/docs/esp8266/img/adafruit_products_pinoutstop.jpg
new file mode 100644
index 0000000000..655e27aee3
--- /dev/null
+++ b/docs/esp8266/img/adafruit_products_pinoutstop.jpg
Binary files differ
diff --git a/docs/esp8266/quickref.rst b/docs/esp8266/quickref.rst
index bfded9bea1..779248369f 100644
--- a/docs/esp8266/quickref.rst
+++ b/docs/esp8266/quickref.rst
@@ -3,7 +3,7 @@
Quick reference for the ESP8266
===============================
-.. image:: https://learn.adafruit.com/system/assets/assets/000/028/689/medium640/adafruit_products_pinoutstop.jpg
+.. image:: img/adafruit_products_pinoutstop.jpg
:alt: Adafruit Feather HUZZAH board
:width: 640px
@@ -43,7 +43,7 @@ The ``network`` module::
wlan.scan() # scan for access points
wlan.isconnected() # check if the station is connected to an AP
wlan.connect('essid', 'password') # connect to an AP
- wlan.mac() # get the interface's MAC adddress
+ wlan.config('mac') # get the interface's MAC adddress
wlan.ifconfig() # get the interface's IP/netmask/gw/DNS addresses
ap = network.WLAN(network.AP_IF) # create access-point interface
@@ -199,9 +199,6 @@ The I2C driver is implemented in software and works on all pins::
buf = bytearray(10) # create a buffer with 10 bytes
i2c.writeto(0x3a, buf) # write the given buffer to the slave
- i2c.readfrom(0x3a, 4, stop=False) # don't send a stop bit after reading
- i2c.writeto(0x3a, buf, stop=False) # don't send a stop bit after writing
-
Deep-sleep mode
---------------
@@ -274,31 +271,55 @@ For low-level driving of a NeoPixel::
import esp
esp.neopixel_write(pin, grb_buf, is800khz)
+APA102 driver
+-------------
+
+Use the ``apa102`` module::
+
+ from machine import Pin
+ from apa102 import APA102
+
+ clock = Pin(14, Pin.OUT) # set GPIO14 to output to drive the clock
+ data = Pin(13, Pin.OUT) # set GPIO13 to output to drive the data
+ apa = APA102(clock, data, 8) # create APA102 driver on the clock and the data pin for 8 pixels
+ apa[0] = (255, 255, 255, 31) # set the first pixel to white with a maximum brightness of 31
+ apa.write() # write data to all pixels
+ r, g, b, brightness = apa[0] # get first pixel colour
+
+For low-level driving of an APA102::
+
+ import esp
+ esp.apa102_write(clock_pin, data_pin, rgbi_buf)
+
WebREPL (web browser interactive prompt)
----------------------------------------
WebREPL (REPL over WebSockets, accessible via a web browser) is an
experimental feature available in ESP8266 port. Download web client
-from https://github.com/micropython/webrepl , and start daemon using::
+from https://github.com/micropython/webrepl (hosted version available
+at http://micropython.org/webrepl), and start the daemon on a device
+using::
import webrepl
webrepl.start()
-(Release version will have it started on boot by default.)
+(Release versions have it started on boot by default.)
On a first connection, you will be prompted to set password for future
sessions to use.
The supported way to use WebREPL is by connecting to ESP8266 access point,
but the daemon is also started on STA interface if it is active, so if your
-routers is set up and works correctly, you may also use it while connecting
-to your normal Internet access point (use ESP8266 AP connection method if
-face any issues).
+router is set up and works correctly, you may also use WebREPL while connected
+to your normal Internet access point (use the ESP8266 AP connection method
+if you face any issues).
WebREPL is an experimental feature and a work in progress, and has known
-issues. There's also provision to transfer (both upload and download)
-files over WebREPL connection, but it has unstable status (be ready to
-reboot a module in case of issues). It still may be a practical way to
+issues.
+
+There's also provision to transfer (both upload and download)
+files over WebREPL connection, but it has even more experimental status
+than the WebREPL terminal mode. It is still a practical way to
get script files onto ESP8266, so give it a try using ``webrepl_cli.py``
-from the repository above. See forum for other community-supported
-alternatives to transfer files to ESP8266.
+from the repository above. See the MicroPython forum for other
+community-supported alternatives to transfer files to ESP8266.
diff --git a/docs/esp8266/tutorial/network_basics.rst b/docs/esp8266/tutorial/network_basics.rst
index 02a7054858..42aed56642 100644
--- a/docs/esp8266/tutorial/network_basics.rst
+++ b/docs/esp8266/tutorial/network_basics.rst
@@ -62,7 +62,7 @@ connect to your WiFi network::
print('connecting to network...')
sta_if.active(True)
sta_if.connect('<essid>', '<password>')
- while not network.isconnected():
+ while not sta_if.isconnected():
pass
print('network config:', sta_if.ifconfig())
diff --git a/docs/esp8266/tutorial/network_tcp.rst b/docs/esp8266/tutorial/network_tcp.rst
index 0a1cca4457..80a494721d 100644
--- a/docs/esp8266/tutorial/network_tcp.rst
+++ b/docs/esp8266/tutorial/network_tcp.rst
@@ -36,7 +36,7 @@ information they hold.
Using the IP address we can make a socket and connect to the server::
>>> s = socket.socket()
- >>> s.connect(addr[0][-1])
+ >>> s.connect(addr)
Now that we are connected we can download and display the data::
diff --git a/docs/library/cmath.rst b/docs/library/cmath.rst
index e45efee303..465cf54ad3 100644
--- a/docs/library/cmath.rst
+++ b/docs/library/cmath.rst
@@ -4,9 +4,12 @@
.. module:: cmath
:synopsis: mathematical functions for complex numbers
-The ``cmath`` module provides some basic mathematical funtions for
+The ``cmath`` module provides some basic mathematical functions for
working with complex numbers.
+Availability: not available on WiPy and ESP8266. Floating point support
+required for this module.
+
Functions
---------
diff --git a/docs/library/index.rst b/docs/library/index.rst
index 03e6502d95..e3d6e31575 100644
--- a/docs/library/index.rst
+++ b/docs/library/index.rst
@@ -1,9 +1,33 @@
MicroPython libraries
=====================
-The following standard Python libraries are built in to MicroPython.
-
-For additional libraries, please download them from the `micropython-lib repository
+This chapter describes modules (function and class libraries) which are built
+into MicroPython. There are a few categories of modules:
+
+* Modules which implement a subset of standard Python functionality and are not
+ intended to be extended by the user.
+* Modules which implement a subset of Python functionality, with a provision
+ for extension by the user (via Python code).
+* Modules which implement MicroPython extensions to the Python standard libraries.
+* Modules specific to a particular port and thus not portable.
+
+Note about the availability of modules and their contents: This documentation
+in general aspires to describe all modules and functions/classes which are
+implemented in MicroPython. However, MicroPython is highly configurable, and
+each port to a particular board/embedded system makes available only a subset
+of MicroPython libraries. For officially supported ports, there is an effort
+to either filter out non-applicable items, or mark individual descriptions
+with "Availability:" clauses describing which ports provide a given feature.
+With that in mind, please still be warned that some functions/classes
+in a module (or even the entire module) described in this documentation may be
+unavailable in a particular build of MicroPython on a particular board. The
+best place to find general information of the availability/non-availability
+of a particular feature is the "General Information" section which contains
+information pertaining to a specific port.
+
+Beyond the built-in libraries described in this documentation, many more
+modules from the Python standard library, as well as further MicroPython
+extensions to it, can be found in the `micropython-lib repository
<https://github.com/micropython/micropython-lib>`_.
Python standard libraries and micro-libraries
@@ -101,6 +125,7 @@ library.
uos.rst
ure.rst
usocket.rst
+ ussl.rst
ustruct.rst
utime.rst
uzlib.rst
diff --git a/docs/library/machine.UART.rst b/docs/library/machine.UART.rst
index 98e24f37dd..7399b9b6e9 100644
--- a/docs/library/machine.UART.rst
+++ b/docs/library/machine.UART.rst
@@ -86,13 +86,15 @@ Methods
When no pins are given, then the default set of TX and RX pins is taken, and hardware
flow control will be disabled. If pins=None, no pin assignment will be made.
-.. method:: uart.deinit()
+.. only:: not port_esp8266
- Turn off the UART bus.
+ .. method:: uart.deinit()
-.. method:: uart.any()
+ Turn off the UART bus.
- Return the number of characters available for reading.
+ .. method:: uart.any()
+
+ Return the number of characters available for reading.
.. method:: uart.read([nbytes])
@@ -127,11 +129,13 @@ Methods
Return value: number of bytes written or ``None`` on timeout.
-.. method:: uart.sendbreak()
+.. only:: not port_esp8266
+
+ .. method:: uart.sendbreak()
- Send a break condition on the bus. This drives the bus low for a duration
- of 13 bits.
- Return value: ``None``.
+ Send a break condition on the bus. This drives the bus low for a duration
+ of 13 bits.
+ Return value: ``None``.
.. only:: port_wipy
@@ -158,14 +162,16 @@ Methods
Returns an irq object.
-Constants
----------
+.. only:: not port_esp8266
+
+ Constants
+ ---------
-.. data:: UART.EVEN
-.. data:: UART.ODD
+ .. data:: UART.EVEN
+ .. data:: UART.ODD
- parity types (anlong with ``None``)
+ parity types (anlong with ``None``)
-.. data:: UART.RX_ANY
+ .. data:: UART.RX_ANY
- IRQ trigger sources
+ IRQ trigger sources
diff --git a/docs/library/machine.rst b/docs/library/machine.rst
index 14d75cb466..b103ec393d 100644
--- a/docs/library/machine.rst
+++ b/docs/library/machine.rst
@@ -18,25 +18,23 @@ Reset related functions
Get the reset cause. See :ref:`constants <machine_constants>` for the possible return values.
-.. only:: port_wipy
-
- Interrupt related functions
- ---------------------------
+Interrupt related functions
+---------------------------
- .. function:: disable_irq()
+.. function:: disable_irq()
- Disable interrupt requests.
- Returns the previous IRQ state: ``False``/``True`` for disabled/enabled IRQs
- respectively. This return value can be passed to enable_irq to restore
- the IRQ to its original state.
+ Disable interrupt requests.
+ Returns the previous IRQ state: ``False``/``True`` for disabled/enabled IRQs
+ respectively. This return value can be passed to enable_irq to restore
+ the IRQ to its original state.
- .. function:: enable_irq(state=True)
+.. function:: enable_irq(state=True)
- Enable interrupt requests.
- If ``state`` is ``True`` (the default value) then IRQs are enabled.
- If ``state`` is ``False`` then IRQs are disabled. The most common use of
- this function is to pass it the value returned by ``disable_irq`` to
- exit a critical section.
+ Enable interrupt requests.
+ If ``state`` is ``True`` (the default value) then IRQs are enabled.
+ If ``state`` is ``False`` then IRQs are disabled. The most common use of
+ this function is to pass it the value returned by ``disable_irq`` to
+ exit a critical section.
Power related functions
-----------------------
@@ -103,6 +101,19 @@ Miscellaneous functions
varies by hardware (so use substring of a full value if you expect a short
ID). In some MicroPython ports, ID corresponds to the network MAC address.
+.. function:: time_pulse_us(pin, pulse_level, timeout_us=1000000)
+
+ Time a pulse on the given `pin`, and return the duration of the pulse in
+ microseconds. The `pulse_level` argument should be 0 to time a low pulse
+ or 1 to time a high pulse.
+
+ The function first waits while the pin input is different to the `pulse_level`
+ parameter, then times the duration that the pin is equal to `pulse_level`.
+ If the pin is already equal to `pulse_level` then timing starts straight away.
+
+ The function will raise an OSError with ETIMEDOUT if either of the waits is
+ longer than the given timeout value (which is in microseconds).
+
.. _machine_constants:
Constants
diff --git a/docs/library/math.rst b/docs/library/math.rst
index 6ed42333c7..9d5cf7b4ba 100644
--- a/docs/library/math.rst
+++ b/docs/library/math.rst
@@ -4,11 +4,14 @@
.. module:: math
:synopsis: mathematical functions
-The ``math`` module provides some basic mathematical funtions for
+The ``math`` module provides some basic mathematical functions for
working with floating-point numbers.
*Note:* On the pyboard, floating-point numbers have 32-bit precision.
+Availability: not available on WiPy. Floating point support required
+for this module.
+
Functions
---------
diff --git a/docs/library/pyb.DAC.rst b/docs/library/pyb.DAC.rst
index 6041151b0f..7b5b1a6821 100644
--- a/docs/library/pyb.DAC.rst
+++ b/docs/library/pyb.DAC.rst
@@ -66,6 +66,10 @@ Methods
Reinitialise the DAC. ``bits`` can be 8 or 12.
+.. method:: dac.deinit()
+
+ De-initialise the DAC making its pin available for other uses.
+
.. method:: dac.noise(freq)
Generate a pseudo-random noise signal. A new random sample is written
diff --git a/docs/library/ussl.rst b/docs/library/ussl.rst
index b66e23b2c8..5371ed1290 100644
--- a/docs/library/ussl.rst
+++ b/docs/library/ussl.rst
@@ -8,56 +8,79 @@ This module provides access to Transport Layer Security (often known as
“Secure Sockets Layer”) encryption and peer authentication facilities for
network sockets, both client-side and server-side.
-Functions
----------
+.. only:: not port_wipy
-.. function:: ssl.wrap_socket(sock, keyfile=None, certfile=None, server_side=False, cert_reqs=CERT_NONE, ca_certs=None)
+ Functions
+ ---------
- Takes an instance sock of socket.socket, and returns an instance of ssl.SSLSocket, a subtype of
- ``socket.socket``, which wraps the underlying socket in an SSL context. sock must be a ``SOCK_STREAM``
- socket and protocol number ``socket.IPPROTO_SEC``; other socket types are unsupported. Example::
+ .. function:: ssl.wrap_socket(sock, server_side=False)
- import socket
- import ssl
- s = socket(socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_SEC)
- ss = ssl.wrap_socket(s)
- ss.connect(socket.getaddrinfo('www.google.com', 443)[0][-1])
+ Takes a stream `sock` (usually usocket.socket instance of ``SOCK_STREAM`` type),
+ and returns an instance of ssl.SSLSocket, which wraps the underlying stream in
+ an SSL context. Returned object has the usual stream interface methods like
+ `read()`, `write()`, etc. In MicroPython, the returned object does not expose
+ socket interface and methods like `recv()`, `send()`. In particular, a
+ server-side SSL socket should be created from a normal socket returned from
+ `accept()` on a non-SSL listening server socket.
- Certificates must be used in order to validate the other side of the connection, and also to
- authenticate ourselves with the other end. Such certificates must be stored as files using the
- FTP server, and they must be placed in specific paths with specific names.
+ .. warning::
- - The certificate to validate the other side goes in: **'/flash/cert/ca.pem'**
- - The certificate to authenticate ourselves goes in: **'/flash/cert/cert.pem'**
- - The key for our own certificate goes in: **'/flash/cert/private.key'**
+ Currently, this function does NOT validate server certificates, which makes
+ an SSL connection established prone to man-in-the-middle attacks.
- .. note::
- When these files are stored, they are placed inside the internal **hidden** file system
- (just like firmware updates), and therefore they are never visible.
+.. only:: port_wipy
- For instance to connect to the Blynk servers using certificates, take the file ``ca.pem`` located
- in the `blynk examples folder <https://github.com/wipy/wipy/tree/master/examples/blynk>`_
- and put it in '/flash/cert/'. Then do::
+ Functions
+ ---------
- import socket
- import ssl
- s = socket.socket(socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_SEC)
- ss = ssl.wrap_socket(s, cert_reqs=ssl.CERT_REQUIRED, ca_certs='/flash/cert/ca.pem')
- ss.connect(socket.getaddrinfo('cloud.blynk.cc', 8441)[0][-1])
+ .. function:: ssl.wrap_socket(sock, keyfile=None, certfile=None, server_side=False, cert_reqs=CERT_NONE, ca_certs=None)
- SSL sockets inherit all methods and from the standard sockets, see the :mod:`usocket` module.
+ Takes an instance sock of socket.socket, and returns an instance of ssl.SSLSocket, a subtype of
+ ``socket.socket``, which wraps the underlying socket in an SSL context. sock must be a ``SOCK_STREAM``
+ socket and protocol number ``socket.IPPROTO_SEC``; other socket types are unsupported. Example::
-Exceptions
-----------
+ import socket
+ import ssl
+ s = socket(socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_SEC)
+ ss = ssl.wrap_socket(s)
+ ss.connect(socket.getaddrinfo('www.google.com', 443)[0][-1])
-.. data:: ssl.SSLError
+ Certificates must be used in order to validate the other side of the connection, and also to
+ authenticate ourselves with the other end. Such certificates must be stored as files using the
+ FTP server, and they must be placed in specific paths with specific names.
-Constants
----------
+ - The certificate to validate the other side goes in: **'/flash/cert/ca.pem'**
+ - The certificate to authenticate ourselves goes in: **'/flash/cert/cert.pem'**
+ - The key for our own certificate goes in: **'/flash/cert/private.key'**
-.. data:: ssl.CERT_NONE
-.. data:: ssl.CERT_OPTIONAL
-.. data:: ssl.CERT_REQUIRED
+ .. note::
- supported values in ``cert_reqs``
+ When these files are stored, they are placed inside the internal **hidden** file system
+ (just like firmware updates), and therefore they are never visible.
+
+ For instance to connect to the Blynk servers using certificates, take the file ``ca.pem`` located
+ in the `blynk examples folder <https://github.com/wipy/wipy/tree/master/examples/blynk>`_
+ and put it in '/flash/cert/'. Then do::
+
+ import socket
+ import ssl
+ s = socket.socket(socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_SEC)
+ ss = ssl.wrap_socket(s, cert_reqs=ssl.CERT_REQUIRED, ca_certs='/flash/cert/ca.pem')
+ ss.connect(socket.getaddrinfo('cloud.blynk.cc', 8441)[0][-1])
+
+ SSL sockets inherit all methods and from the standard sockets, see the :mod:`usocket` module.
+
+ Exceptions
+ ----------
+
+ .. data:: ssl.SSLError
+
+ Constants
+ ---------
+
+ .. data:: ssl.CERT_NONE
+ .. data:: ssl.CERT_OPTIONAL
+ .. data:: ssl.CERT_REQUIRED
+
+ supported values in ``cert_reqs``
diff --git a/docs/library/ustruct.rst b/docs/library/ustruct.rst
index ae5b1be003..74e42af07a 100644
--- a/docs/library/ustruct.rst
+++ b/docs/library/ustruct.rst
@@ -7,6 +7,12 @@
See `Python struct <https://docs.python.org/3/library/struct.html>`_ for more
information.
+Supported size/byte order prefixes: ``@``, ``<``, ``>``, ``!``.
+
+Supported format codes: ``b``, ``B``, ``h``, ``H``, ``i``, ``I``, ``l``,
+``L``, ``q``, ``Q``, ``s``, ``P``, ``f``, ``d`` (the latter 2 depending
+on the floating-point support).
+
Functions
---------
diff --git a/docs/wipy/tutorial/repl.rst b/docs/wipy/tutorial/repl.rst
index ef69d91445..e7b51f9c59 100644
--- a/docs/wipy/tutorial/repl.rst
+++ b/docs/wipy/tutorial/repl.rst
@@ -52,7 +52,12 @@ or::
$ screen /dev/tty.usbmodem* 115200
-When you are finished and want to exit screen, type CTRL-A CTRL-\\.
+When you are finished and want to exit ``screen``, type CTRL-A CTRL-\\. If your keyboard does not have a \\-key (i.e. you need an obscure combination for \\ like ALT-SHIFT-7) you can remap the ``quit`` command:
+
+- create ``~/.screenrc``
+- add ``bind q quit``
+
+This will allow you to quit ``screen`` by hitting CTRL-A Q.
Linux
-----