Telpo C9D Cash Drawer
This page records the hardware details found on the Android POS terminal used for cash drawer integration.
Verified device
Checked over ADB on 2026-07-08.
| Field | Value |
|---|---|
| ADB serial | A65C009P00400034 |
| Manufacturer | Telpo |
| Android model | C9D |
| Android version | 14 |
| Build display id | C9D_A14_V1.1.3_202603250221 |
The device may be referred to operationally as CPOS TH C9PD, but Android
reports the hardware as Telpo C9D.
Installed helper packages
Relevant packages found on the terminal:
| Package | Notes |
|---|---|
com.cpos.helper | Installed helper app. APK strings identify it as Telpo Drawer Helper. |
com.telpo.omcservice | Telpo privileged system service. |
th.co.boonsiri.posterminal | POS terminal app. |
com.boonsiri.printerconfig | Printer configuration app/package with Android PrintService and PrinterContentProvider. |
com.cpos.helper was installed from Files (com.google.android.apps.nbu.files)
and reports version 1.1.1.
com.boonsiri.printerconfig reports version 1.0.0, declares
com.boonsiri.printerconfig.READ_PRINTERS, and exposes:
com.boonsiri.printerconfig/.print.BoonsiriPrintServicecom.boonsiri.printerconfig/.provider.PrinterContentProvider- provider authority
com.boonsiri.printerconfig.provider
Verified USB peripherals
adb -s A65C009P00400034 shell dumpsys usb found two USB peripherals.
Receipt printer
| Field | Value |
|---|---|
| USB path | /dev/bus/usb/001/005 |
| Manufacturer | ICOD |
| Product | ICOD_Thermal_Printer |
| Vendor ID | 1155 |
| Product ID | 30016 |
| USB class | 7 (Printer) |
| Interface class | 7 |
| Interface subclass | 1 |
| Interface protocol | 2 |
| Serial number | 000000000005920ca2 |
| OUT endpoint | address 3, max packet size 64 |
| IN endpoint | address 129, max packet size 64 |
The USB settings also register com.cpos.helper/.MainActivity for attached USB
devices with class 7, so the Telpo drawer helper is expected to handle USB
printer attach events.
Scanner / keyboard wedge
| Field | Value |
|---|---|
| USB path | /dev/bus/usb/001/003 |
| Manufacturer | HID . |
| Product | DECODER-KEYBOARD |
| Vendor ID | 7554 |
| Product ID | 23712 |
| USB class | HID class 3 |
This device appears as a keyboard-style scanner and should not be treated as the receipt printer.
Drawer capabilities found
The helper APK contains cash drawer specific code and text, including:
Telpo Drawer Helpercom.cpos.helper.Drawercom.cpos.helper.PrinterProxyServicecom.cpos.helper.TEST_DRAWERACTION_TEST_DRAWERDrawer ProxyDrawer ModeMODE_TELPOMODE_USBMODE_PRINTERTelpo only (GPIO/SDK)USB only (drawer on printer)Auto (printer + Telpo)Standard printer (drawer connected to printer)
The APK also includes Telpo SDK classes relevant to direct drawer control:
com.telpo.tps550.api.moneybox.MoneyBoxcom.common.apiutil.moneybox.MoneyBoxcom.common.apiutil.util.TelpoLib
Native libraries found in the helper APK:
libtelpo-lib.solibserial-util.solibusb-util.so
libtelpo-lib.so references /dev/telpo_gpio and exposes JNI symbol
Java_com_common_apiutil_util_TelpoLib_ioctlControlJNI, which suggests the
Telpo SDK can drive GPIO-level drawer control.
Printer drawer kick command
The helper APK also contains an ESC/POS drawer kick path for drawers connected through a receipt printer.
Command bytes found:
1B 70 00 19 FA
Equivalent byte array:
[0x1b, 0x70, 0x00, 0x19, 0xfa]
Use this only when the cash drawer is connected to the receipt printer drawer port, usually RJ11/RJ12.
For the verified ICOD USB thermal printer, raw USB ESC/POS output should target the printer device, not the scanner:
- expected target product:
ICOD_Thermal_Printer - expected USB path at time of inspection:
/dev/bus/usb/001/005 - expected OUT endpoint: address
3
Recommended implementation
Add an Android native module in apps/pos-terminal for cash drawer control.
Recommended behavior:
- Prefer Telpo direct drawer control through
MoneyBoxor the Telpo GPIO SDK. - Fall back to ESC/POS drawer kick when the drawer is connected through a USB, LAN, or Bluetooth receipt printer.
- For the current terminal, identify the printer by USB product name
ICOD_Thermal_Printeror vendor/product id1155:30016. - Expose a React Native API such as
CashDrawer.open()for UI and payment flows. - Add a manual operator button such as
เปิดลิ้นชัก. - Optionally call the same API after successful cash payment.
- Log failures with enough detail to distinguish Telpo SDK failure from printer fallback failure.
Suggested TypeScript boundary:
type CashDrawerOpenMode = "auto" | "telpo" | "printer";
type CashDrawerNativeModule = {
open(mode?: CashDrawerOpenMode): Promise<void>;
isSupported(): Promise<boolean>;
};
Suggested Android behavior:
open("auto")
-> try Telpo MoneyBox / GPIO
-> if not available, try configured printer ESC/POS kick
-> throw a clear error if both fail
Safety notes
- Testing the command can physically open the drawer.
- Ask the operator before running drawer tests on a live terminal.
- Avoid repeated rapid pulses. Add debounce/rate limiting in app code.
- Do not assume every POS terminal has the same helper app or GPIO path. Check the Android model and installed packages before enabling direct Telpo mode.
Useful ADB commands
Identify the connected POS device:
adb devices
adb -s A65C009P00400034 shell getprop ro.product.manufacturer
adb -s A65C009P00400034 shell getprop ro.product.model
adb -s A65C009P00400034 shell getprop ro.build.display.id
adb -s A65C009P00400034 shell getprop ro.build.version.release
Inspect helper packages:
adb -s A65C009P00400034 shell pm list packages
adb -s A65C009P00400034 shell dumpsys package com.cpos.helper
adb -s A65C009P00400034 shell pm path com.cpos.helper
Inspect printer and scanner USB devices:
adb -s A65C009P00400034 shell dumpsys usb
adb -s A65C009P00400034 shell dumpsys package com.boonsiri.printerconfig