PinePhone (Pro) Keyboard
Please help to review and edit this page or section. Information are subject to change.
The PinePhone (Pro) Keyboard Case is a case compatible with the PinePhone and PinePhone Pro, adding a keyboard functionality to the phone. It features a clam-shell design and uses the pogo pins located on the smartphone’s midsection and attaches by replacing the default back cover. This add-on effectively turns the PinePhone (Pro) into a PDA with an in-built LTE modem.
Getting started
The keyboard case works with both the PinePhone and PinePhone Pro and features a clam-shell design. It uses pogo pins located on the phone’s midsection and attaches by replacing the default back cover. When folded, the phone’s screen and the keyboard rest securely against each other. The hinge features a 180° design, which not only allows for two-hand typing on a surface but also for comfortable thumb-typing when fully extended. The etched keycaps can be easily relocated for alternate layouts such as AZERTY or QWERTZ. The keyboard case runs an open firmware, which means that anyone with the know-how can alter existing functions or add new ones. The bottom (keyboard) and top (phone) sections of the assembly are well-balanced thanks to the large, 6000mAh, internal battery capable of charging the PinePhone (Pro) during operation. The internal battery effectively triples the phone’s battery life. The internal keyboard battery can be manually toggled on/off and the keyboard’s battery charge level can be read in the supported OSes; the keyboard remains functional with the battery fully depleted.
You do not lose access to the PinePhone (Pro)’s USB-C port, speaker, microphone, or any external features, such as volume and lock buttons, with the keyboard attached. There is also a cut-out for the camera, torch, and headphone jack. The USB-C port on the keyboard is capable of powering both the keyboard and PinePhone (Pro) simultaneously. This means that you can plug in a USB mouse, a USB-C dongle, or some other peripheral while the phone and keyboard’s internal battery charge. Please keep in mind that the keyboard case transforms the PinePhone (Pro) into a PDA, which means that taking calls will likely prove awkward without a wired or wireless headset connected.
Mounting the keyboard
Power OFF your PinePhone and remove the back case. To remove the back case of the PinePhone use your fingernail or another soft object to pry up the back case. A notch to easily remove the cover is located at the bottom left of the PinePhone with the backcover facing the user.
Open and place the keyboard flat on a hard surface with the hinge fully extended. Proceed to insert the PinePhone into the keyboard at an angle of approx. 15 degrees. Make sure that the PinePhone’s pogo pins and the corresponding pads ① on the keyboard are aligned. The leading edge with volume and power buttons should make contact first. Firmly press the PinePhone into place. Multiple clicks should be heard as the two snap into place. Pay special attention to the plastic pin below the camera hole. Firmly push from the rear, below the camera hole to click it into place. Failing to to so may cause insufficient pin contact and prevent the case from charging the phone.
The PinePhone can be removed from the keyboard easily using a notch similar to the one found on the back case. The notch is located at the bottom of the leading edge with the power and volume buttons.
Keyboard and internal battery operation
The keyboard will function automatically once a PinePhone running a compatible operating system is mounted. For alterations to physical layout and firmware see the relevant sections respectively.
The keyboard features an in-built 6000mAh battery. The battery can be turned ON/OFF using the button on the right leading edge of the keyboard ②. A short button press activates the internal battery while a long (15 seconds) press deactivates it. Compatible operating systems display both the PinePhone’s and keyboard’s battery status.
You should charge the PinePhone and the keyboard only using the USB-C ③ port on the keyboard. The keyboard’s USB-C port cannot be used for peripherals. The PinePhone’s USB-C port remains operational when mounted in the keyboard and can be used for data and peripherals.
Software support
Kernel-space driver
Kernel driver implementation from Samuel Holland: ip5xxx_power and kb151 https://github.com/smaeul/linux/commits/wip/pp-keyboard
User-space driver
The user-space driver is available here. Use git to clone the repository. You're going to need sdcc 4.1+ installed to build it, so use your package manager to install that first. Next you'll cd into the directory you cloned pinephone-keyboard and use the command "make" to build. After the build is completed, cd into the build directory and you'll notice several new files starting with ppkb-. To use your keyboard case, you'll want to run the following command: sudo ./ppkb-i2c-inputd
Open something you can type into like a new terminal window or text editor and you should now be able to use the keyboard case! One thing you may notice is that squeekboard is still opening whenever a text field is selected. This can quickly become annoying, so I made myself the following aliases to prevent this:
alias kboff='gsettings set org.gnome.desktop.a11y.applications screen-keyboard-enabled false'
alias kbon='gsettings set org.gnome.desktop.a11y.applications screen-keyboard-enabled true'
Change the alias names to whatever you want if you don't like the names I used for mine. The keyboard case becomes much more useful when squeekboard no longer toggles constantly, but you'll want a way to turn it back on easily before removing the keyboard case so you can keep using your phone!
Keyboard layout
The keyboard features a default layout (pictured below) created and agreed upon by the community. The keyboard layout can be altered using software as well as by physically repositioning keycaps. All keycaps, with the exception of space and return keys, can be easily and safely relocated for alternative layouts corresponding to software settings.
Keyboard firmware
PinePhone’s keyboard firmware was developed independently by Ondřej Jirman as a free-of-charge contribution to PINE64. The firmware source code is freely and publicly available and you can modify it, and the supporting utilities, using common FOSS tools.
Firmware and supporting utilities
The design of the firmware allows the keys, modifier keys, and their combinations to be handled in virtually unlimited ways, without a need to flash a customized version of the firmware. Mapping of keys is defined at runtime, using the supporting utilities, and is not hardcoded in the firmware. Different keyboard layouts can be loaded dynamically to support various use cases.
The repository that contains the source code of the firmware, supporting utilities and associated documentation is located at https://xnux.eu/pinephone-keyboard/.
You are welcome to contribute patches and improvements to the firmware and the supporting utilities. A summary of firmware development history is available at https://xnux.eu/log/ alongside other development updates from the firmware author.
Much time and effort went into the development of this firmware. If you wish to send a token of appreciation or support the development efforts in any way, please consider making a donation to the author via one of the methods listed at the bottom of this web page: https://xnux.eu/contribute.html.
Firmware License
Copyright (C) 2021 Ondřej Jirman <megi@xff.cz>
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, with either version 3 of the License or (at your discretion) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See GNU General Public License for more details.
GNU General Public License http://www.gnu.org/licenses/
Hardware
Detailed keyboard specifications including schematics can be found on our Wiki: https://wiki.pine64.org/wiki/PinePhoneKeyboard
Key hardware specifications:
- Dimensions (closed): 161 x 95 x 21.5mm
- Weights (without / with PinePhone mounted): ~ 191 / ~391 grams
- Number of keys: 54
- Number of rows: 5
- Keyboard IC: Keyboard IC: EM85F684A 8-bit microcontroller with 256 bytes RAM, 2048/ bytes XRAM; 16kB for user’s own firmware
- Battery capacity: 6000mAh (22.2Wh 3.7V)
- Charger input: 5V, 3A (15W)
- Charging and battery IC chip: IP5209 power management IC with charge indicate controller and boost converter
Safety
TODO
Frequently asked questions
Please help to review and edit this page or section. Information are subject to change.
The keyboard does not work under OSK-SDL (full-disk encryption UI at boot)
That is a known bug, see https://gitlab.com/postmarketOS/pmaports/-/issues/1383.
What is the keyboard driver situation?
See https://xnux.eu/pinephone-keyboard/faq.html#drivers
Are keyboard drivers included in my distribution?
See https://xnux.eu/pinephone-keyboard/faq.html#distros
What's the status of the existing software for the keyboard?
See https://xnux.eu/pinephone-keyboard/faq.html#sw-status
My keyboard doesn't work (well)!
See https://xnux.eu/pinephone-keyboard/faq.html#faq-ts
How does charging work?
See https://xnux.eu/pinephone-keyboard/faq.html#charging
What charger is best for the keyboard?
See https://xnux.eu/pinephone-keyboard/faq.html#chargers
How safe is the charger circuit in the keyboard?
See https://xnux.eu/pinephone-keyboard/faq.html#safety
Keyboard doesn't react to any key presses
See https://xnux.eu/pinephone-keyboard/faq.html#ts
Keyboard works but top row of keys is less responsive
See https://xnux.eu/pinephone-keyboard/faq.html#ts
Phone is not charging from the keyboard
See https://xnux.eu/pinephone-keyboard/faq.html#ts
Phone is charging slowly from the keyboard battery
See https://xnux.eu/pinephone-keyboard/faq.html#ts
External links
- The official keyboard manual
- Pre-order announcement
- FAQ of the developer megous: https://xnux.eu/pinephone-keyboard/faq.html