Well, I lied, because projects like this one are never actually finished. But let's say I'm not going to do any major rework from now.
It took one more board revision and a little bit of coding to come up with final hardware
In the meantime, I made some minor changes to circuit, but the overall concept was still the same. Complete schematics is here https://github.com/jaromir-sukuba/pi_zero_computer/blob/master/hw/2i.sch.pdf but for sake of simplicity here you have hand drawn block diagram
Heart of the device is Raspberry Pi Zero. The power is delivered from two LiPo cells in series, MCP73844 acting as charging IC and three TPS562200 are performing DC/DC down conversion to get three voltages:
* 5V for RPi
* 5V for USB
* 3,3V for WiFi
All of them are individually switchable from the STM32L011 and this is under RPi control via serial interface (native serial port of RPi), the STM can also report status of battery and charging controller. The STM32L011 itself is always powered via MCP1700 voltage regulator. Power consumption of the device in sleep mode is approximately 10uA.
Since RPi has only one USB port, I used FE1.1s USB hub IC to have USB WiFi RTL8188EUS module and USB keyboard/mouse devices along with two general purpose USB ports.
STM32F072 interacts with all tactile user IO (keyboard, joystick, mouse buttons) and acts as USB HID device for RPi, with interfaces to both keyboard and mouse. Since having 4x4 matrix keyboard (reasons why I opted for this keyboard are here and here) obviously brings some complications compared to full-blown 104 key keyboard, so I had to be a bit creative about the key combinations assignment. The bottom row keys act as modifier keys, but after a bit of trying, it is not that hard to remember.
Gray keys denote pressed modifier keys. With no modifier keys pressed, you have to top layout - press key 7 once, you get 'p', press one more within 800ms, you get 'q', then 'r', then 's'. For special characters, press first modifier keys. I tried to arrange them in some logical manner, grouping related characters, like parenthesis or +-* symbols. For running executables in bash, press left modifier, hit first and second button, this types ./, then name of executable (using tab key saves you some typing). Forethink the executable filenames at least a bit and you can run most of them in a few key hits.
User interface is completed by TFT, with ILI9341 controller. It can be bought through usual Asian sources. There is nothing special about it, interfacing this kind of display has been done to death.
Audio is quite straightforward - the RC lowpass filter is no surprise to RPi users, TDA1308 acting as headphone amplifier is jelly-bean component, in intended application.
Enclosure is 3D printed, in three parts and is designed to keep the whole package together using 4 pieces of M2,5 screws
Overall dimensions are 16,3x7,3x2cm
Should have used BananaPi for scale, but RPi 3 should do the job too.