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 viaICC (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
How Beeper and LED Control Works
The PS5 communicates with its embedded controller (ICC) through a set of kernel functions exposed inlibkernel_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);
| Value | Audible Result | Confirmed |
|---|---|---|
| 0 | No beep (silent) | Yes |
| 1 | One short beep | Yes |
| 2 | Error tone pattern | Yes |
| 3 | One long sustained beep | Yes |
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 withsceKernelIccSetDynamicLedDimSetting.
Code:
int sceKernelIccSetBuzzerDimSetting(int level);
| Value | Volume Level | Return Code | Confirmed |
|---|---|---|---|
| 0 | High | 0x0 | Yes |
| 1 | Medium | 0x0 | Yes |
| 2 | Low | 0x0 | Yes |
| 3 | Invalid | 0x80020005 | Yes |
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);
| Value | Effect | Confirmed |
|---|---|---|
| 0 | Unmuted | Yes |
| 1 | Muted | Yes |
| 2 | Also muted | Yes |
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);
| Value | LED Brightness | Confirmed |
|---|---|---|
| 0 | Bright | Yes |
| 1 | Medium | Yes |
| 2 | Dim | Yes |
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)
Code:
ICC:payload.elf<106:101745> calls set_buzzer(1) ICC:SceShellUI<97:101999> calls set_dynamic_led_dim_setting(0)
sceKernelIcc prefix and converting to snake_case. Using the Library
Copyps5_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
-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
Code:
python beeper_gui.py
9111 and accepts newline-terminated commands: | Command | Effect |
|---|---|
| BUZZ <0-3> | sceKernelIccSetBuzzer(n) |
| VOL <0-2> | sceKernelIccSetBuzzerDimSetting(n) |
| MUTE <0-1> | sceKernelIccSetBuzzerOffSetting(n) |
| LED <0-2> | sceKernelIccSetDynamicLedDimSetting(n) |
| QUIT | Shut down server |
OK ret=0x0 or ERR Research and library by StonedModder. All findings confirmed via live hardware testing on a jailbroken PS5.






