Open source · ESP32-S3 · MIT

A phone operating system. 100 % open source.

Phone OS is a complete operating system for a phone, open from the first line to the last: the firmware, the parents' web page, the simulator and every document, all under the MIT licence. It runs on a ready-made handheld with an ESP32-S3, an e-ink display, a 4G modem and GPS.

What a device does is its configuration. The first one built with Phone OS is an emergency phone for a child: it calls the family, reads and writes texts, sends its position at the press of a button, and nothing else.

The guide in Deutsch Français

The home screen of the device
Loading the pictures…

Every picture was drawn by the simulator from the firmware's own code. Press the keys as on the device, or tap the screen: the tiles, the rows and the buttons answer. The full demo adds what the keys do not lead to: a call coming in, school time, a flat battery.

How it gets onto a device

Phone OS is not sold with a phone. You buy the device, download the code and flash it yourself over a USB cable. Four steps, no soldering.

1. The device

A LilyGO T-Deck Pro MAX: a finished handheld in its case, with an ESP32-S3, an e-ink display, a 4G modem, GPS, a keyboard and a battery. Sold ready-made by its maker and by electronics shops; after flashing it is a phone, not a kit. It is the one device Phone OS runs on so far. Add a SIM card and a microSD card.

The device at LilyGO
2. The code

Download the repository from GitHub and install PlatformIO Core, a free command-line tool. That is the whole toolchain.

git clone https://github.com/paulwilke/Phone-OS.git
3. The card

Format the microSD card as FAT32, copy the three example files from config/examples/ into a folder /config/ on it, and write your contacts and settings into them: plain text, one line per entry.

4. Flash

Connect the device by USB and run one command. About a minute later the device starts with your card.

pio run -e device -t upload

Phone OS has no connection with LilyGO or with any shop; the T-Deck Pro MAX is the device the firmware was built and tested on. Other hardware needs its own platform code below the capabilities, and nothing above them changes.

The checklist for the first start

What is tested, and what is verified

The project claims only what was checked. Every change carries one of three marks, and the changelog says which.

Compiled

It builds for the ESP32-S3. That is all this says.

Tested on the host

The logic runs on a laptop against fakes of every chip, and the simulator plays whole scenarios through the real screens.

Verified on the device

Seen on the real phone by the owner, with a date in the decision log. What the device taught is written down, and a lesson that changed the code gets its own decision.

current version
2,500+host tests
pictures in this demo, in three languages
0real names or numbers on this page: every example is invented

One application, two platforms

The firmware and the simulator run the same composition of the same code. Only what lies below the capability interfaces differs: real chips on the device, scripted fakes on the laptop. That is why the pictures on this page are the device's pictures.

LayerHoldsMay know
src/hal/the capabilities: interfaces named after what the software needs (clock, modem, power, positioning, files)nothing
src/app/ src/ui/the application (contact book, school time, SOS, messages) and the pagesthe capabilities only; never the hardware or a driver
src/drivers/ src/board/the modem driver, the receiver parser, the chips of the devicethe capabilities
device/the firmware's platform code: the Arduino and ESP32 side of the seamssrc/
sim/ testing/the simulator and the fakes of every capabilitysrc/

A script checks the rules on every commit; a layer that reaches past its neighbour fails the build.

What the child's phone does, and what it refuses

Set up as a child's phone, the device does a few things, each all the way: it calls only the contact book, drops everything from strangers without a sound, and stays quiet during school. The parents set it up from their own phone, in a browser.

A call from Parent One comes in

Phone

The child calls whom the parents listed, and nobody else can call or write. A stranger's call or text leaves one line in the log: no ring, no vibration, no notice.

Choosing a ready-made message

Text

Six ready-made messages, shown in the child's language and sent in the parents'. Free text and new numbers only when the parents switch them on.

The SOS page with its countdown

SOS

One button. A countdown of 40 seconds, then a text with the position goes to the parents; a call during the countdown does not cancel it.

The home screen during school time

School time

In the windows the parents set, the phone stays shut and every call is turned away without a ring. The parents see a missed call and can call back.

The Wi-Fi page with the access point on

The parents' page

Contacts, school time, settings and the log, from a phone in a browser: over the device's own access point or over the USB cable. The page is served by the device itself.

Battery nearly empty

The battery

The device switches itself off at 3300 mV and says so. A reading every ten minutes goes to an energy log; that log is how the gauge's own mistakes were found.

Read on

Every document is written from the code it covers, and every decision is written down with who made it and why.