Software

From ZeroPhone
Jump to: navigation, search

This page lists all software used on a ZeroPhone, both specifically developed for it and already existing.

Software

ZPUI

License Apache 2.0
Language Python
Sources https://github.com/ZeroPhone/ZPUI
Packaging None yet; TODO

ZPUI is the official ZeroPhone UI, tailored for the 128x64 display and buttons. It has an assortment of Python apps for controlling a ZeroPhone, and it's going to evenutally be the base for a fully capable mobile phone UI, allowing to do everything that dumbphone UIs allow - and more.

ZeroPhone Python API

License GPLv3
Language Python
Sources https://github.com/ZeroPhone/ZeroPhone-API-Python
Packaging zerophone_hw on PyPi

A Python wrapper around ZeroPhone hardware control functions. Currently, allows ZPUI apps and other software to control the 5V DC-DC and RGB LED, as well as see if the ZeroPhone is charging.

BootSetupScript

License GPLv3
Language Bash
Sources https://github.com/ZeroPhone/zerophone-power-management
Packaging zerophone_power_management in ZeroPhone Raspbian repository

A small script that runs on ZeroPhone boot and enables the ZPUI software power switch (flashing the RGB LED green in the process).

ESP8089 driver

License GPLv2
Language C
Sources https://github.com/ZeroPhone/esp8089
Upstream sources https://github.com/al177/esp8089
Packaging esp8089 in ZeroPhone Raspbian repository

A driver allowing us to use ESP-12 WiFi modules as WiFi cards.

Firmware

Keypad firmware

License GPLv3
Language C
Sources https://github.com/ZeroPhone/ZeroPhone-Keypad-FW
Packaging None yet

This is a firmware for the ATMega328P on the ZeroPhone front board. Currently, it reads the ZeroPhone keypad and sends the keycodes over I2C; in the future, vibromotor/keypad backlight control and ADC/PWM support will be added.

Third-party firmware

ESP8089 driver firmware

License Unknown
Sources Not available
Updateable Yes
Discussion https://github.com/ZeroPhone/Discussion-and-Research/issues/10

This is the firmware blob used by the esp8089 driver to make a ESP-12 module work as a WiFi card over SDIO (included in the esp8089 driver sources and, subsequently, the esp8089-dkms package). It's loaded by the driver into the ESP-12 module over SDIO, when the driver is loaded.

SIM800 modem firmware

License Unknown
Sources Not available
Updateable Yes
Discussion https://github.com/ZeroPhone/Discussion-and-Research/issues/12

This is a closed-source firmware that's loaded into the modem at the factory, and is responsible for most of the modem's operation. Various firmware images are avaiable on the Internet, along with Windows-specific update tools and instructions. There does not seem to be a tool to update the modem firmware under Linux, but it should be doable, given that the specifications are available (GitHub issue)

Raspberry Pi boot ROM

License Unknown
Sources Not available
Updateable No

This is a ROM that controls the earliest stage of the Raspberry Pi boot process. It's hard-coded in during the chip manufacturing, so it's impossible to upgrade it. It contains the code that launches the code from the SD card if one is present, as well as puts the Pi in the load-code-over-USB mode ("BCM2708 Boot") when the SD card is not found; this applies to all the Pi's, including Zero and Zero W that we use. In BCM2837 CPUs (Pi 3 and Pi 3B+), this ROM is also responsible for USB/LAN boot. This ROM does not seem to warrant a discussion, since it's a mask ROM that can't be updated and the associated security/privacy concerns are therefore low.

Raspberry Pi bootloader

License Proprietary
Sources Not available
Updateable Yes
Discussion https://github.com/ZeroPhone/Discussion-and-Research/issues/2

This is a binary blob that is launched from the SD card by the boot ROM from the FAT32 ("boot") partition on the SD card; its filename is bootcode.bin. It's supplied in its binary form through the Raspbian-supplied .deb packages. It initializes a significant part of the hardware (GPU, RAM, UART and the CPU itself), loads information from config.txt and cmdline.txt files, then loads the Linux kernel from the same partition and launches it with parameters taken from the cmdline.txt file (and some additional ones).

Meta TODO

  • add an "Operating system" section, describing Raspbian and other alternatives as they appear?
  • add significant third-party ZPUI dependencies (i.e. luma.oled)?