PS5 Beeper & LED Controller — ICC Kernel Research + Payload Library

TheStonedModder

Developer
Developer
Joined
Dec 25, 2022
Messages
2,714
Reaction score
4,068
Trophies
2
Age
29
XP
8,458
Country
United States

PS5 Beeper & LED Controller — ICC Kernel Research + Payload Library

This thread documents original research into the PS5's internal hardware beeper and LED brightness controls via ICC (Inter-Chip Communication) kernel syscalls. All findings were confirmed by live hardware testing on a jailbroken PS5, with kernel logs captured via klog on port 3232. A ready-to-use C library and TCP server payload are included so you can integrate beeper/LED control into your own payloads. Source: https://github.com/StonedModder/ps5-beeper-LED-Controller
Does not work on low firmware consoles. If your PS5 system settings does not have a "Beep and Light" menu option, this will not work for you. Meaning FW 9.0 minimum unless someone can backport this somehow



1779631922668.png


How Beeper and LED Control Works​

The PS5 communicates with its embedded controller (ICC) through a set of kernel functions exposed in libkernel_sys. These functions send commands directly to the hardware, bypassing software audio and display settings entirely. All four beeper functions and the LED function are resolved at runtime via kernel_dynlib_dlsym using handle 0x1 (libkernel handle for the payload's own process). sceKernelIccSetBuzzer is available in the PS5 payload SDK stubs and can be linked directly. The other three (DimSetting, OffSetting, DynamicLedDimSetting) are absent from the SDK stubs and must be resolved at runtime.

Function Reference​

1. sceKernelIccSetBuzzer — Beep Type​

Controls which beep pattern the hardware plays. State is not persistent; the ICC plays the pattern once and returns.
Code:
int sceKernelIccSetBuzzer(int value);
ValueAudible ResultConfirmed
0No beep (silent)Yes
1One short beepYes
2Error tone patternYes
3One long sustained beepYes
All four values return 0x0 on success.

2. sceKernelIccSetBuzzerDimSetting — Beeper Volume​

Controls the volume level of the beeper. The ICC chip holds this state persistently until it is changed or the console loses power. Note: Despite the name "DimSetting", this controls beeper volume, not display brightness. Do not confuse with sceKernelIccSetDynamicLedDimSetting.
Code:
int sceKernelIccSetBuzzerDimSetting(int level);
ValueVolume LevelReturn CodeConfirmed
0High0x0Yes
1Medium0x0Yes
2Low0x0Yes
3Invalid0x80020005Yes

3. sceKernelIccSetBuzzerOffSetting — Beeper Mute​

Controls whether the beeper produces any sound at all. The ICC chip holds this state persistently.
Code:
int sceKernelIccSetBuzzerOffSetting(int mute);
ValueEffectConfirmed
0UnmutedYes
1MutedYes
2Also mutedYes
Testing method: payload sets the mute state, then the user presses the physical eject button to trigger a hardware beep and listen for presence or absence of sound. Values 1 and 2 both produce complete silence.

4. sceKernelIccSetDynamicLedDimSetting — LED Brightness​

Controls the brightness of the PS5's LED indicator. The ICC chip holds this state persistently.
Code:
int sceKernelIccSetDynamicLedDimSetting(int level);
ValueLED BrightnessConfirmed
0BrightYes
1MediumYes
2DimYes

Runtime Symbol Addresses​

(Observed — may vary by firmware)
Code:
sceKernelIccSetBuzzer @ 0x800023f50 sceKernelIccSetBuzzerDimSetting @ 0x800025410 sceKernelIccGetBuzzerDimSetting @ 0x8000254b0 sceKernelIccSetBuzzerOffSetting @ 0x800025570 sceKernelIccGetBuzzerOffSetting @ 0x800025610 sceKernelIccSetDynamicLedDimSetting @ 0x800025790 sceKernelIccGetDynamicLedDimSetting @ 0x800025830

ICC Klog Format​

When a beeper or LED command is issued, the PS5 kernel logs an ICC trace line:
Code:
ICC:process_name calls command_name(args)
Examples:
Code:
ICC:payload.elf<106:101745> calls set_buzzer(1) ICC:SceShellUI<97:101999> calls set_dynamic_led_dim_setting(0)
The ICC log command names map to kernel function names by stripping the sceKernelIcc prefix and converting to snake_case.

Using the Library​

Copy ps5_beeper.h and ps5_beeper.c into your payload project and add ps5_beeper.c to your build.
Code:
#include "ps5_beeper.h" // Beep types ps5_beeper_single(); // one short beep ps5_beeper_error(); // error tone pattern ps5_beeper_long(); // one long beep ps5_beeper_silent(); // no beep (ICC-ack only) ps5_beeper_raw(2); // direct value // Volume (ICC state persists) ps5_beeper_set_volume(PS5_BEEPER_VOLUME_HIGH); // 0 ps5_beeper_set_volume(PS5_BEEPER_VOLUME_MED); // 1 ps5_beeper_set_volume(PS5_BEEPER_VOLUME_LOW); // 2 // Mute (ICC state persists) ps5_beeper_set_mute(PS5_BEEPER_MUTE_ON); // silence all beeps ps5_beeper_set_mute(PS5_BEEPER_MUTE_OFF); // restore beeps // LED brightness (ICC state persists) ps5_beeper_set_led(PS5_BEEPER_LED_BRIGHT); // 0 ps5_beeper_set_led(PS5_BEEPER_LED_MEDIUM); // 1 ps5_beeper_set_led(PS5_BEEPER_LED_DIM); // 2
Required link flags: -lSceUserService -lpthread

beeper_server.elf + beeper_gui.py​

A persistent TCP server payload (beeper_server.elf) and a Python tkinter GUI (beeper_gui.py) are included for interactive control over the network. Deploy the server to your PS5:
Code:
make deploy PS5_HOST=192.168.1.x
Or use the "Deploy Payload" button in the GUI. Run the GUI:
Code:
python beeper_gui.py
The server listens on port 9111 and accepts newline-terminated commands:
CommandEffect
BUZZ <0-3>sceKernelIccSetBuzzer(n)
VOL <0-2>sceKernelIccSetBuzzerDimSetting(n)
MUTE <0-1>sceKernelIccSetBuzzerOffSetting(n)
LED <0-2>sceKernelIccSetDynamicLedDimSetting(n)
QUITShut down server
Response format: OK ret=0x0 or ERR
Research and library by StonedModder. All findings confirmed via live hardware testing on a jailbroken PS5.
 

Site & Scene News

Popular threads in this forum