Skip to the content
PCBKitNew board
4 layers31 × 16 mmPocket link, the printed circuit board in 3D

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

4

README

README.md

Pocket 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.

text
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
FolderWhat
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.mdUSB 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.mdWhich phones work. Please add yours.

Build one (DIY)

You do not need our board. Any RP2040 board works for a first test:

  1. Hold BOOT and plug a Raspberry Pi Pico or Waveshare RP2040-Zero into a PC; copy firmware/pocket-link-fw/pocket-link-fw.uf2 onto the RPI-RP2 drive.
  2. Run python3 firmware/tools/link_pc_test.py status (needs pyusb numpy and the udev rule in firmware/README.md). loopback must pass both ways.
  3. 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-audio is MIT OR Apache-2.0 by its author, with our patches listed in its PATCHES.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
QtyValueFootprintReferences
12100nFCapacitor_SMD:C_0402_1005MetricC10, C11, C12, C13, C14, C15, C16, C17, C18, C22, C23, C26
31kResistor_SMD:R_0402_1005MetricR4, R5, R6
31uFCapacitor_SMD:C_0402_1005MetricC1, C20, C21
3TPTestPoint:TestPoint_Pad_D1.0mmTP1, TP2, TP3
227RResistor_SMD:R_0402_1005MetricR2, R3
233pFCapacitor_SMD:C_0402_1005MetricC24, C25
110uFCapacitor_SMD:C_0603_1608MetricC2
112MHzCrystal:Crystal_SMD_3225-4Pin_3.2x2.5mmY1
15.1kResistor_SMD:R_0402_1005MetricR1
1AP2112K-3.3Package_TO_SOT_SMD:SOT-23-5U3
1GREENLED_SMD:LED_0603_1608MetricD1
1RP2040Pocket:QFN-56-1EP_7x7mm_P0.4mm_EP3.2x3.2mm_Vias0.3U1
1USB-C plugConnector_USB:USB_C_Plug_Molex_105444J1
1USBLC6-2SC6Package_TO_SOT_SMD:SOT-23-6U4
1W25Q16JVSNIQPackage_SO:SOIC-8_3.9x4.9mm_P1.27mmU2

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 mmLatte, the printed circuit board in 3D

    Latte

    WojtaCZ/latte-hw

    An open source USB device latency tester

    79 partsGPL-3.0
  • 4 layers86 × 34 mmBsl drv v1, the printed circuit board in 3D

    Bsl drv v1

    jackw01/scanlight

    A better light source for scanning color negative film

    157 parts397CERN-OHL-W-2.0
  • 6 layers150 × 87 mmPOWERCORE V2.0 MOTHERBOARD, the printed circuit board in 3D

    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 mmLibreCAL, the printed circuit board in 3D

    LibreCAL

    jankae/LibreCAL

    4 port eCal module

    132 parts140GPL-3.0
  • 4 layers56 × 71.5 mmBattery powered, the printed circuit board in 3D

    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 mmJackrabbit, the printed circuit board in 3D

    Jackrabbit

    rjhsun/jackrabbit

    16-channel logic analyzer / bus sniffer tool

    64 parts2MIT
  • 4 layers40 × 50 mmMemcard dumper, the printed circuit board in 3D

    Memcard dumper

    jareklupinski/memcard-dumper

    Memory Card Dumper for the Raspberry Pico

    42 parts1