

Pocket link
Open hardware: a USB-C adapter that lets a Pocket bot hear and speak on an Android phone's own calls. Board (CERN-OHL-P-2.0), RP2040 firmware and protocol (Apache-2.0).
- Size
- 31 × 16 mm
- Copper layers
- 4
- Thickness
- 0.8 mm
- Parts
- 34
- Nets
- 21
- Pads
- 167
- Tracks, vias
- 173, 113
- Pours
- 4
- Routed
- Yes
- KiCad
- KiCad 7 (file 20221018)
- Created
- 20 Oct 2026
- Updated
- 20 Oct 2026
Overview
Pocket link is an open-source printed circuit board by anshkumar, from the anshkumar/pocket-link repository on GitHub, published under the Apache-2.0 licence. It is a 4-layer board of 31 × 16 mm with 34 parts on 21 nets, routed with 173 tracks and 113 vias.
It is built around the RP2040, W25Q16JVSNIQ and AP2112K-3.3, with the USBLC6-2SC6 among its other parts. Its parts include 18 capacitors, 6 resistors, 4 ICs, 1 diode and 1 connector. It belongs with the interfaces and adapters boards and the RP2040 boards of this library.
Main components
4RP2040
LQFN-56(7x7)12bit 133MHz 30 LQFN-56(7x7) Microcontrollers (MCU/MPU/SOC) ROHSRaspberry PiMicrocontrollers (MCU/MPU/SOC)W25Q16JVSNIQ
SOIC-8-40℃~+85℃ 100,000 cycles 10uA 120ms@(32KB) 133MHz 16Mbit 2.7V~3.6V 20 Years 400us SPI SOIC-8 NOR FLASH ROHSWinbond ElecNOR FLASHAP2112K-3.3
SOT253.3V 600mA CMOS Low Dropout Linear Regulator with EnableDiodes IncorporatedUncategorisedUSBLC6-2SC6
SOT-23-60.35pF、0.8pF 100nA 150W@8/20us 15V 2 5V 6A@8/20us 6V ESD SOT-23-6 ESD and Surge Protection (TVS/ESD) ROHSUMWESD And Surge Protection (TVS/ESD)
README
README.mdPocket Link
A small USB-C adapter that lets a Pocket bot hear and speak on an Android phone's own calls, and (firmware 0.2) tap and type on the phone for it. The phone sees a USB headset, so Android routes the call's audio to it; a second channel on the same plug carries that audio to the Pocket app, which streams it to the voice engine over the phone's own internet. No Bluetooth, no Wi-Fi, no battery, nothing stored on the device.
This is open hardware. The board, the firmware, the USB protocol and the test tools are here so that anyone can see exactly what the thing plugged into their phone does, build one, or make it work on a phone we have not tried.
caller ⇄ phone (cellular / WhatsApp call)
│ Android routes call audio to the "USB headset"
▼
USB-C ⇄ Pocket Link (RP2040)
│ interface 1–2: USB Audio (UAC 1.0) headset, mic in / headphones out
│ interface 3: vendor bulk data channel
│ interface 4: HID touch screen + keyboard (firmware 0.2): the app's taps and keystrokes
▼
Pocket app (USB host API) ⇄ WebSocket ⇄ voice engine| Folder | What |
|---|---|
revA/ | The first board: KiCad project, Gerbers, BOM, CPL, STEP, schematic PDF, and source/design.py, the generator that is the single source of truth. 31 × 16 mm, 4-layer, board-edge USB-C plug. Proven on real calls (Motorola edge 60, Android 16) on 2026-10-08. |
revB/ | The next board: the same circuit as a pod on the back of the phone with a short lead, two layers, under ₹500 to build. Plan and cost model; files follow. |
firmware/pocket-link-fw/ | RP2040 firmware (Rust): composite USB headset + data channel + HID touch screen/keyboard, 48 kHz ⇄ 16 kHz resampling, the data protocol. Prebuilt pocket-link-fw.uf2. |
firmware/pocket-link-fw/PROTOCOL.md | USB descriptors and the app ⇄ adapter packet protocol. The contract the Pocket app implements. |
firmware/tools/ | link_pc_test.py: status, two-way loopback test and bootloader entry from a Linux PC. link_input_bench.py: tap, swipe and type on the phone through the adapter, over adb. |
firmware/hosttest/ | USB descriptor dump and validator; resampler frequency response. |
firmware/android-test/ | A bare Android test app (Java, no Gradle) that talks to the adapter and a local voice engine. Useful for bring-up on a new phone. |
COMPATIBILITY.md | Which phones work. Please add yours. |
Build one (DIY)
You do not need our board. Any RP2040 board works for a first test:
- Hold BOOT and plug a Raspberry Pi Pico or Waveshare RP2040-Zero into a PC; copy
firmware/pocket-link-fw/pocket-link-fw.uf2onto theRPI-RP2drive. - Run
python3 firmware/tools/link_pc_test.py status(needspyusb numpyand the udev rule infirmware/README.md).loopbackmust pass both ways. - Connect the board to the phone with a USB-C OTG cable, install the Pocket app, open Account → Voice → Pocket Link, and set it up. The app recognises the device by its USB identity.
A Pico on an OTG cable is a working Pocket Link. It is also a lever on your phone's port; the pod in revB/ exists because of that.
Licences
- Hardware (
revA/,revB/): CERN-OHL-P-2.0 (LICENSE-HARDWARE.txt). Permissive: build it, sell it, change it, keep the notice. - Firmware, tools and the test app (
firmware/): Apache-2.0 (LICENSE).third_party/usbd-audiois MIT OR Apache-2.0 by its author, with our patches listed in itsPATCHES.md. - "Pocket" and "Pocket Link" are names of Pocket; a clone of the design is welcome, a clone of the name is not.
USB identity
Rev A ships with the pid.codes test ID 1209:0001. Before a public batch we apply for a real PID at
pid.codes, which allocates them to open-source hardware; PID-REQUEST.md is the
application. Until then, anything you build with this firmware carries the test ID, which must not be sold.
Contributing
Phone reports (COMPATIBILITY.md), firmware fixes and alternative boards are all welcome; see
CONTRIBUTING.md. Bring-up lessons so far: the headphones stream must be stereo (a mono USB output
makes Android 16's mixer abort audioserver), and the app should claim the device through a
USB_DEVICE_ATTACHED intent filter so Android offers "always" on the permission prompt.
Parts
34| Qty | Value | Footprint | References |
|---|---|---|---|
| 12 | 100nF | Capacitor_SMD:C_0402_1005Metric | C10, C11, C12, C13, C14, C15, C16, C17, C18, C22, C23, C26 |
| 3 | 1k | Resistor_SMD:R_0402_1005Metric | R4, R5, R6 |
| 3 | 1uF | Capacitor_SMD:C_0402_1005Metric | C1, C20, C21 |
| 3 | TP | TestPoint:TestPoint_Pad_D1.0mm | TP1, TP2, TP3 |
| 2 | 27R | Resistor_SMD:R_0402_1005Metric | R2, R3 |
| 2 | 33pF | Capacitor_SMD:C_0402_1005Metric | C24, C25 |
| 1 | 10uF | Capacitor_SMD:C_0603_1608Metric | C2 |
| 1 | 12MHz | Crystal:Crystal_SMD_3225-4Pin_3.2x2.5mm | Y1 |
| 1 | 5.1k | Resistor_SMD:R_0402_1005Metric | R1 |
| 1 | AP2112K-3.3 | Package_TO_SOT_SMD:SOT-23-5 | U3 |
| 1 | GREEN | LED_SMD:LED_0603_1608Metric | D1 |
| 1 | RP2040 | Pocket:QFN-56-1EP_7x7mm_P0.4mm_EP3.2x3.2mm_Vias0.3 | U1 |
| 1 | USB-C plug | Connector_USB:USB_C_Plug_Molex_105444 | J1 |
| 1 | USBLC6-2SC6 | Package_TO_SOT_SMD:SOT-23-6 | U4 |
| 1 | W25Q16JVSNIQ | Package_SO:SOIC-8_3.9x4.9mm_P1.27mm | U2 |
Questions
How big is the Pocket link PCB?
It measures 31 × 16 mm and has 4 copper layers, 0.8 mm thick.
What parts does the Pocket link use?
34 parts, built around the RP2040, W25Q16JVSNIQ, AP2112K-3.3 and USBLC6-2SC6. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
Where can I download the Pocket link KiCad files?
From the anshkumar/pocket-link repository on GitHub, at the commit this page was made from: the board is revA/kicad/pocket-link.kicad_pcb and its schematic revA/kicad/link.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the Pocket link design in my own project?
Its repository publishes it under the Apache-2.0 licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).
Similar boards
- 4 layers50 × 50 mm

- 4 layers86 × 34 mm

Bsl drv v1
jackw01/scanlight
A better light source for scanning color negative film
157 parts397CERN-OHL-W-2.0 - 6 layers150 × 87 mm

POWERCORE V2.0 MOTHERBOARD
Rack-Robotics/Powercore-V2.0
Open-Source wire EDM power supply by Rack Robotics, Inc.
254 parts258 - 4 layers55 × 73.5 mm

- 4 layers56 × 71.5 mm

Battery powered
homelith/pico-disp-ident
Custom firmware to make some RP2040 board working as DVI display tester & identifier
64 parts2MIT - 2 layers45.1 × 29.2 mm

- 2 layers95 × 78 mm

- 4 layers40 × 50 mm
