A lightweight Windows system tray companion for JBL headphones to manage noise cancellation, battery levels, and audio settings right from your desktop.
Unofficial — not affiliated with HARMAN International or JBL.
The official JBL Headphones application is exclusively available on smartphones (iOS and Android). When you are listening to music, watching videos, or attending meetings on a PC, adjusting Active Noise Cancellation (ANC), switching to Ambient Aware, checking battery percentages, or modifying sound modes requires reaching for your phone every time.
JblTray eliminates this friction by bringing direct, native hardware control right into your Windows system tray.
- Dedicated Battery Indicators: Independent tray icons displaying numeric percentages for Left Earbud, Right Earbud, and Charging Case with clear color-coded statuses.
- Noise Control Modes: One-click toggling between ANC (Active Noise Cancellation), Ambient Aware, TalkThru, and Off.
- ANC Level Slider: Fine-tune noise cancellation strength across 7 discrete steps (Level 1–7).
- Spatial Sound: Built-in spatial audio presets tailored for Movie, Music, and Game experiences.
- Max Volume Limit (SafeSound): Hearing protection limiter toggle to cap sound pressure levels.
- Smart Audio & Video: Switch between Audio mode (optimized audio fidelity) and Video mode (low latency for synchronized lip-sync).
- Find My Buds: Ring left and right earbuds independently with an audible beeping tone, and stop the tone on demand.
- Task Scheduler Automation: Optional start on Windows logon and event-driven start whenever headphones connect, plus auto-exit after 5 minutes of idle disconnect. Operates without administrator privileges.
- Bilingual Interface: Automatic Turkish/English interface detection based on Windows display language, switchable on the fly.
- Automatic Device Discovery: Discovers paired JBL devices via Bluetooth LE GATT and connects to the one exposing the control service without manual configuration.
- Privacy & Security: Connects solely to pre-paired devices; unencrypted BLE frames are never exchanged with unknown devices in range. No telemetry, no background tracking, no accounts.
- Pair your headphones: Pair your JBL headphones with Windows first using standard Bluetooth settings (
Settings>Bluetooth & devices). - Download: Grab the latest release package from the Releases page.
- Extract: Extract the downloaded ZIP archive into any folder of your choice.
- Run: Launch
JblTray.exe.
What happens on first launch:
A headphone icon appears in your notification area (system tray). JblTray automatically scans your paired Bluetooth devices for a compatible JBL headset. Once found and connected, the headphone icon turns orange, and three separate battery icons (Left, Right, Case) appear alongside it in the tray.
-
Main Headphone Icon: Indicates overall connection status.
-
Orange (
#FF7800): Connected to your JBL headphones. -
Gray (
#6E6E6E): Disconnected or searching for headphones.
-
Orange (
-
Battery Icons (Left / Right / Case): Display numeric battery percentages. Only visible while headphones are actively connected.
-
Cyan / Blue (
#50C8FF): Charging in the case or connected to power. -
Green (
#5ADC5A): Battery level$\ge 50%$ . -
Orange (
#FFB428): Battery level$\ge 20%$ and$< 50%$ . -
Red (
#FF4646): Low battery ($< 20%$ ). - Gray dash ("–"): No data reported (e.g., earbud turned off, in sleep, or docked in case).
-
Cyan / Blue (
-
Interactions:
- Double-click: Double-clicking either the main headphone icon or any battery icon opens the control window.
-
Right-click Menu:
- ANC: Switch to Active Noise Cancellation mode.
- Ambient Aware: Enable environmental sound pass-through.
- TalkThru: Lower media volume and amplify speech.
- Off: Turn off noise control processing.
-
Startup (submenu):
- Start with Windows: Launches 20 seconds after user logon.
- Start when headphones connect: Launches on Windows audio connection events.
- Exit when headphones are away (5 min): Auto-exits 5 minutes after disconnection (only when launched automatically).
- Dil / Language: Switch interface between English and Türkçe.
- Create device report…: Gathers read-only diagnostic data, copies it to clipboard, and opens the GitHub issue template.
- Show Window: Opens the main graphical control panel.
- Exit: Completely terminates the application.
Opening the window reveals a clean dark control interface (ui.html):
- Header & Status: Displays the device model name (e.g., JBL Tune Flex 2) alongside a live status dot and label (Connected in green / Connecting… / Not connected in red).
- Battery Section: Displays real-time numeric percentages for Left, Right, and Case (shows "—" if an earbud is unavailable).
- Noise Control Section: Master toggle switch, three mode buttons (ANC, Ambient Aware, TalkThru), and a 1–7 stepped slider to adjust ANC level. When toggled off, controls dim to 40% opacity and lock.
- Spatial Sound Section: Master toggle switch and three audio scene selectors (Movie, Music, Game). When toggled off, controls dim and lock.
- Max Volume Limit Section: Master toggle switch to enable hearing protection (SafeSound).
- Smart Audio Video Section: Master toggle switch and mode selector (Audio / Video). When toggled, the headset briefly reconnects to apply codec parameters.
- Find My Buds Section: Independent Left and Right buttons. Clicking triggers a beeping tone on that earbud (marked with a stop symbol "■"); clicking again stops the tone.
- Refresh Button: Forces an immediate status poll and reconnect attempt, rotating the icon during the query.
- Window Closing Behavior: Clicking the standard "X" (close) button does not quit the app. It cancels termination and hides the window (
Hide()), keeping JblTray alive in your system tray (MainForm.cs).
JblTray interacts with headphones using a reverse-engineered BLE GATT protocol.
| Status | Model Count | Models / Details |
|---|---|---|
| ✅ Verified | 1 | JBL Tune Flex 2 (hardware tested, all core features verified) |
| 🟡 Likely to Work | 7 | Tune Buds 2, Tune Beam 2, Tune 255NC, Wave Buds 2, Wave Flex 2, Vibe Buds 2, Vibe Flex 2 (share BES chipset & protocol 3) |
| ❔ Unknown | 59 | Protocol 4 (29 models) & Legacy BES SDK (30 models) — Community reports needed! |
| ❌ Unlikely | 28 | Different chipsets & protocols (Airoha, Realtek, Avnera, etc.) |
For the comprehensive model list and chipset breakdown, see docs/COMPATIBILITY.md. Note that hardware features missing from a specific headset model (e.g., ANC on buds lacking ANC microphones) cannot be enabled via software.
If you own another JBL model, you can help verify compatibility in less than a minute:
- Connect your headphones to your PC and launch JblTray.
- Right-click the tray icon and select "Create device report… / Cihaz raporu oluştur…".
- A balloon notification will show while safe read-only queries are performed (~15 seconds).
- The report is copied to your clipboard, and your browser opens the GitHub issue form.
- Paste into the "Report" box (
Ctrl+V), check what works on your device, and submit:
👉 Submit Device Report
What the report contains (JblDevice.cs BuildReportAsync):
- JblTray application version & Windows OS version.
- Number of paired JBL devices in Windows.
- For each paired device: Device Bluetooth name, command service status, discovered GATT service UUIDs, and advertisement manufacturer data.
- For connected devices: Raw byte sequences of sent queries and received responses (
battery,noise control,anc level,spatial,volume limit,codec,device info).
What the report NEVER contains:
- Your Bluetooth MAC address is strictly masked (replaced with
xx xx xx xx xx xxeven if embedded within raw payload bytes). - No IP address, location, user names, computer names, or personal files are accessed or included.
- Only non-destructive GET probes are sent; no volume/mode settings are altered and no beeping sounds are emitted.
Example Report Snippet:
### JblTray device report
- App: 0.2.0
- Windows: 10.0.26300.0
- Paired JBL devices: 1
#### JBL Tune Flex 2
- Command service: found, connected
- Read-only queries (sent → replies):
- battery: `AA 25 01 00` → `AA 25 0D 01 00 00 53 5E 00 55 53 00 A3 10 55 00`
- device info: `AA 11 00` → `AA 12 25 4A 42 4C ... xx xx xx xx xx xx ...`JblTray provides three automation options under the tray "Startup" menu (Startup.cs):
- Start with Windows (
RunAtLogon): Creates a Task Scheduler task namedJblTray-AtLogon. It starts the app with--tray20 seconds after user logon (<Delay>PT20S</Delay>), ensuring the Windows Bluetooth stack and system tray are initialized before starting. - Start when headphones connect (
RunOnConnect): Creates a Task Scheduler task namedJblTray-OnHeadphoneConnect. It listens to the Windows Audio operational log (Microsoft-Windows-Audio/Operational, Event ID 65 withNewState=1[Active]). The event query is pre-filtered with paired JBL device names. When triggered, it starts the app with a 2-second delay. - Exit when headphones are away (5 min) (
IdleExit): When enabled, automatically shuts down the process if headphones remain disconnected for 5 continuous minutes. This rule only triggers when JblTray was started automatically via--tray; manually started instances remain open until user exit.
Key Technical Details:
- Tasks run under standard user privileges (
LeastPrivilege); no administrator elevation is needed. - Task Scheduler is used instead of the registry
Runkey because Windows 11 often silently ignoresRunentries lacking aStartupApprovedkey, andRunentries are easily suppressed by system utilities. - Notice: If you pair a new JBL headset with Windows, toggle the "Start when headphones connect" option off and on again so Task Scheduler updates the event query with your new device name.
- Headphones not found / disconnected: Ensure the headphones are paired in Windows Settings first. If earbuds are inside the charging case or turned off, BLE GATT advertising is disabled. Take them out of the case and click the "Refresh" button in the control window.
- Report says "LE device not reachable": The headphones are powered off, inside the closed case, or out of Bluetooth range.
- Multiple JBL devices paired (e.g., Bluetooth speaker): JblTray enumerates paired devices starting with "JBL". If a device does not expose the GATT command service (such as standard JBL Go/Flip speakers), it is skipped automatically. The last successfully connected device is prioritized.
- WebView2 error on startup: The control window requires the Microsoft Edge WebView2 Runtime (pre-installed on Windows 11). If missing on Windows 10, download and install the free Evergreen WebView2 Runtime from Microsoft.
- Windows SmartScreen warning: Because release executables are currently unsigned open-source binaries, Windows may display a blue SmartScreen prompt. Click More info → Run anyway.
- Headphones disconnect briefly when changing Smart Audio & Video: This is expected hardware behavior. The headphones must perform a quick internal Bluetooth renegotiation to apply the codec/latency profile.
- Diagnostic logs: Logs are saved locally to
%TEMP%\jbltray.log. - Resetting preferences: All user preferences (language, startup state, last device address) are stored in the Windows Registry under
HKCU\Software\JblTray. Deleting this registry key resets the app to defaults.
- Open the tray menu, go to Startup, and uncheck both "Start with Windows" and "Start when headphones connect" (this cleanly deletes the scheduled tasks
JblTray-AtLogonandJblTray-OnHeadphoneConnect). - Right-click the tray icon and choose Exit.
- Delete the folder containing
JblTray.exe. - (Optional) Delete the registry key
HKCU\Software\JblTrayand log file%TEMP%\jbltray.log.
- Device Discovery: Queries paired Bluetooth devices starting with "JBL". Because commands are unencrypted, JblTray strictly ignores unpaired nearby devices. The most recently used address is tested first.
- Event-Driven & Polling Cycle: When disconnected, an active BLE advertisement scanner runs in cycles of 20 seconds scanning / 40 seconds resting to conserve power and avoid RF congestion. If headphones disconnect, scanning restarts immediately.
- State Refresh While Connected: While connected, there is no continuous polling; the headset pushes notifications when settings change. JblTray runs a background refresh every 10 minutes (600 seconds) to ensure battery and status indicators stay synchronized.
- Packet Structure: BLE GATT Service UUID
65786365-6c70-6f69-6e74-2e636f6d0000("excelpoint.com"). Write characteristic TX is...0002(WriteRequest) and Notify characteristic RX is...0001(Notify). Packets follow the[0xAA] [CMD] [LEN] [PAYLOAD]framing convention without application-layer checksums. - Protocol Details: See PROTOCOL.md for reverse-engineered byte tables and command specifications.
Requires the .NET 8 SDK.
# Standard build
dotnet build src -c Release
# Standalone single-file publish package (as distributed in releases)
dotnet publish src -c Release -r win-x64 --self-contained true -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true -p:EnableCompressionInSingleFile=true -p:DebugType=none -o dist/JblTray(Note: The build process automatically copies ui.html to the output folder alongside JblTray.exe.)
-
src/-
JblDevice.cs: Core BLE GATT communication, device discovery, advertisement watcher, packet serializer/parser, and diagnostic reporter. -
TrayContext.cs: Application lifecycle, dynamic icon generator (headphone status and battery levels), tray context menu, and idle timer. -
MainForm.cs: WebView2 host window, two-way C#$\leftrightarrow$ JavaScript bridge, and window minimize/hide handler. -
Startup.cs: Windows Task Scheduler management (schtasks.exe), Windows audio event filter XML builder, and registry configuration. -
Lang.cs: Bilingual localization engine (English / Türkçe) with dynamic UI refresh notifications. -
Program.cs: Entry point, single-instance mutex enforcement, CLI argument handling (--tray,--autostart), and global exception logging. -
ui.html: Standalone HTML/CSS/JS frontend for WebView2, featuring modern dark mode, responsive sliders, and icon assets.
-
-
docs/: Compatibility documentation (COMPATIBILITY.md) and screenshot assets (ekran.png). -
.github/ISSUE_TEMPLATE/: GitHub issue forms (device-report.yml). -
PROTOCOL.md: Technical documentation of the reverse-engineered JBL BLE GATT protocol.
Contributions are welcome! You can help by submitting device reports, reporting bugs, improving translations, or contributing to protocol reverse engineering.
Protocol Help Needed:
- Custom EQ & EQ presets (
cmd 0x40,0x41) — packet format not yet fully decoded. - Touch gesture customization (
cmd 0x71,0x77) — pending analysis.
Roadmap (Planned / Not implemented yet):
- [Planned] Dynamic feature visibility based on detected headset capabilities.
- [Planned] Graphic Equalizer (EQ) preset switcher and custom band sliders.
- [Planned] Touch gesture mapping configuration.
- [Planned] Single battery indicator mode for over-ear / on-ear headphone models.
- Zero Telemetry: No user data or analytics are collected or transmitted.
- Network Activity: Limited exclusively to loading Google Fonts (Inter) and Font Awesome icons via CDN inside WebView2.
- Local Diagnostics: Logs are written only to
%TEMP%\jbltray.log. - Registry Footprint: Stored exclusively under
HKCU\Software\JblTray.
This is an unofficial, open-source project. It is not affiliated with, sponsored by, or endorsed by HARMAN International or JBL. JBL is a registered trademark of HARMAN International Industries, Incorporated. Use at your own risk.
Distributed under the MIT License.
Resmî JBL Headphones uygulaması yalnızca akıllı telefonlarda (iOS ve Android) mevcuttur. Bilgisayarınızda müzik dinlerken, video izlerken veya toplantı halindeyken Aktif Gürültü Engelleme'yi (ANC) açıp kapatmak, Ambient Aware moduna geçmek, kulaklık pil seviyelerini kontrol etmek veya ses modlarını değiştirmek için her defasında telefona uzanmak gerekir.
JblTray, bu zahmeti ortadan kaldırarak doğrudan Windows sistem tepsinizden tek tıkla donanım kontrolü sağlar.
- Ayrı Pil Göstergeleri: Sistem tepsisinde sol kulaklık, sağ kulaklık ve şarj kutusu pil yüzdeleri için durum renklerine sahip bağımsız sayısal simgeler.
- Gürültü Kontrolü: ANC (Aktif Gürültü Engelleme), Ambient Aware, TalkThru ve Kapalı modları arasında tek tıkla geçiş.
- ANC Seviyesi Kaydırıcısı: Gürültü engelleme gücünü 1 ile 7 arasında kademeli olarak ayarlama.
- Spatial Sound: Film (Movie), Müzik (Music) ve Oyun (Game) deneyimleri için optimize edilmiş uzamsal ses modları.
- Maksimum Ses Sınırı (SafeSound): İşitme sağlığını korumak için ses basıncını sınırlayan güvenlik anahtarı.
- Smart Audio & Video: Audio (yüksek ses sadakati) ve Video (düşük gecikmeli dudak senkronizasyonu) modları arasında geçiş.
- Kulaklığı Bul: Sol ve sağ kulaklık için bağımsız bip sesi çaldırma ve istendiğinde durdurma.
- Görev Zamanlayıcı Otomasyonu: Windows oturum açılışında ve kulaklık bağlandığında otomatik başlatma; kulaklık yokken 5 dakika sonra otomatik kapanma. Yönetici yetkisi gerektirmez.
- Çift Dilli Arayüz: Windows sistem diline göre otomatik Türkçe/İngilizce algılama; tepsi menüsünden anında değiştirilebilir.
- Otomatik Cihaz Keşfi: Eşli Bluetooth cihazları arasından JBL modellerini otomatik tarar ve komut servisine sahip kulaklığa doğrudan bağlanır.
- Gizlilik ve Güvenlik: Yalnızca önceden bilgisayarla eşlenmiş cihazlara bağlanır; yabancı cihazlarla iletişim kurmaz. Telemetri, takip veya kullanıcı hesabı yoktur.
- Kulaklığı Eşleyin: Kulaklığınızı öncelikle standart Windows Bluetooth ayarlarından (
Ayarlar>Bluetooth ve cihazlar) bilgisayarınızla eşleyin. - İndirin: Releases sayfasından en son yayınlanan ZIP paketini indirin.
- Çıkartın: İndirdiğiniz ZIP arşivini dilediğiniz bir klasöre çıkartın.
- Çalıştırın:
JblTray.exedosyasını çalıştırın.
İlk açılışta ne olur:
Sistem tepsisinde (bildirim alanında) bir kulaklık simgesi belirir. JblTray, Windows'a eşli Bluetooth cihazlarınızı tarayarak uyumlu JBL kulaklığınızı bulur. Bağlantı kurulduğunda ana kulaklık simgesi turuncuya döner ve yanında Sol, Sağ ve Kutu için üç ayrı renkli pil simgesi belirir.
-
Ana Kulaklık Simgesi: Genel bağlantı durumunu gösterir.
-
Turuncu (
#FF7800): JBL kulaklığa bağlı. -
Gri (
#6E6E6E): Bağlı değil veya kulaklık aranıyor.
-
Turuncu (
-
Pil Simgeleri (Sol / Sağ / Kutu): Pil yüzdesini sayısal olarak gösterir. Yalnızca kulaklık bağlıyken görünür.
-
Açık Mavi / Cyan (
#50C8FF): Kutuda şarj oluyor veya şarja takılı. -
Yeşil (
#5ADC5A): Pil seviyesi$\ge %50$ . -
Turuncu (
#FFB428): Pil seviyesi$\ge %20$ ve$<%50$ . -
Kırmızı (
#FF4646): Düşük pil ($<%20$ ). - Gri tire ("–"): Veri yok (kulaklık kapalı, uykuda veya kutu kapağı kapalı).
-
Açık Mavi / Cyan (
-
Etkileşimler:
- Çift Tıklama: Ana kulaklık simgesine veya herhangi bir pil simgesine çift tıklamak kontrol penceresini açar.
-
Sağ Tık Menüsü:
- ANC: Aktif Gürültü Engelleme moduna geçer.
- Ambient Aware: Çevresel sesleri duyma moduna geçer.
- TalkThru: Medya sesini kısıp konuşmaları netleştiren moda geçer.
- Kapat: Gürültü kontrolünü kapatır.
-
Başlangıç (alt menü):
- Windows açılışında başlat: Oturum açıldıktan 20 saniye sonra gecikmeli başlatır.
- Kulaklık bağlanınca başlat: Kulaklık Windows'a bağlandığı anda ses olayıyla başlatır.
- Kulaklık yokken kapan (5 dk): Bağlantı koptuktan 5 dakika sonra uygulamayı kapatır (yalnızca otomatik başlatıldığında geçerlidir).
- Dil / Language: Türkçe ve English arasında anında geçiş yapar.
- Cihaz raporu oluştur…: Donanım sorgularını çalıştırır, raporu panoya kopyalar ve GitHub formunu açar.
- Pencereyi Göster: Ana kontrol panelini açar.
- Çıkış: Uygulamayı tamamen sonlandırır.
Pencere açıldığında modern koyu temalı bir arayüz sunar (ui.html):
- Başlık ve Durum: Cihaz model adı (örn. JBL Tune Flex 2) ile canlı durum noktası ve metni (Bağlı [yeşil] / Bağlanıyor… / Bağlı değil [kırmızı]).
- Pil Bölümü: Sol, Sağ ve Kutu için anlık pil yüzdeleri (kulaklık takılı değilse "—" görünür).
- Gürültü Kontrolü Bölümü: Açma/kapatma anahtarı (toggle switch), 3 mod butonu (ANC, Ambient Aware, TalkThru) ve 1–7 kademeli ANC seviyesi kaydırıcısı. Anahtar kapatıldığında kontroller %40 donuklaşır ve kilitlenir.
- Spatial Sound Bölümü: Açma/kapatma anahtarı ve 3 sahne seçeneği (Movie, Music, Game). Anahtar kapalıyken kontroller kilitlenir.
- Maksimum Ses Sınırı Bölümü: Güvenli ses seviyesi sınırlayıcısını (SafeSound) açıp kapatan anahtar.
- Smart Audio Video Bölümü: Açma/kapatma anahtarı ve mod butonları (Audio / Video). Mod değiştirildiğinde kulaklık codec parametrelerini uygulamak için kısa süreliğine yeniden bağlanır.
- Kulaklığı Bul Bölümü: Bağımsız Sol ve Sağ butonları. Basıldığında kulaklıktan bip sesi çalar (durdurma simgesi "■" görünür); tekrar basıldığında ses durur.
- Yenile Butonu: Durumu ve bağlantıyı kulaklıktan yeniden sorgular; sorgu sırasında simge döner.
- Pencereyi Kapatma Davranışı: Pencerenin "X" (kapat) butonuna tıklamak uygulamayı sonlandırmaz. Form gizlenir (
Hide()) ve uygulama sistem tepsisinde arka planda çalışmaya devam eder (MainForm.cs).
JblTray, tersine mühendislikle çözümlenmiş BLE GATT protokolü üzerinden haberleşir.
| Durum | Model Sayısı | Modeller / Ayrıntılar |
|---|---|---|
| ✅ Doğrulandı | 1 | JBL Tune Flex 2 (donanım üzerinde test edildi, tüm temel işlevler onaylandı) |
| 🟡 Büyük İhtimalle Çalışır | 7 | Tune Buds 2, Tune Beam 2, Tune 255NC, Wave Buds 2, Wave Flex 2, Vibe Buds 2, Vibe Flex 2 (aynı BES yongası ve protocol 3 ailesi) |
| ❔ Bilinmiyor | 59 | Protocol 4 (29 model) ve Eski BES SDK (30 model) — Topluluk raporları bekleniyor! |
| ❌ Muhtemelen Çalışmaz | 28 | Farklı yonga setleri ve protokoller (Airoha, Realtek, Avnera vb.) |
Kapsamlı model dökümü ve yonga seti analizi için docs/COMPATIBILITY.md belgesini inceleyin. Kulaklığın fiziksel donanımında bulunmayan özelliklerin (örneğin ANC mikrofonu olmayan bir kulaklıkta ANC modu) yazılımla çalışmayacağını unutmayın.
Farklı bir JBL kulaklığınız varsa, bir dakikadan kısa sürede uyumluluğu test ederek projeye katkıda bulunabilirsiniz:
- Kulaklığınızı bilgisayarınıza bağlayın ve JblTray'i çalıştırın.
- Tepsi simgesine sağ tıklayıp "Cihaz raporu oluştur… / Create device report…" seçeneğine tıklayın.
- Uygulama yaklaşık 15 saniye boyunca güvenli okuma sorguları yaparken bilgi balonu gösterir.
- Rapor panonuza kopyalanır ve tarayıcınızda GitHub form sayfası açılır.
- Formdaki "Rapor / Report" alanına yapıştırın (
Ctrl+V), çalışan özellikleri işaretleyin ve gönderin:
👉 Cihaz Raporu Gönder
Raporda NELER VAR (JblDevice.cs BuildReportAsync):
- JblTray uygulama sürümü ve Windows işletim sistemi sürümü.
- Windows ile eşleştirilmiş JBL cihaz sayısı.
- Eşli her cihaz için: Bluetooth cihaz adı, komut servisi durumu, bulunan GATT servis UUID'leri ve reklam üretici verisi.
- Bağlı cihazlar için: Gönderilen okuma sorguları ve kulaklıktan gelen ham cevap baytları (
battery,noise control,anc level,spatial,volume limit,codec,device info).
Raporda NELER YOK:
- Bluetooth MAC adresiniz kesinlikle raporda yer almaz (ham baytlar içinde geçse dahi
xx xx xx xx xx xxşeklinde otomatik maskelenir). - IP adresi, konum, kullanıcı adı, bilgisayar adı veya kişisel dosyalar ASLA taranmaz ve rapora girmez.
- Yalnızca zararsız GET sorguları yapılır; hiçbir ayar değiştirilmez ve ses çalınmaz.
Örnek Rapor Parçası:
### JblTray device report
- App: 0.2.0
- Windows: 10.0.26300.0
- Paired JBL devices: 1
#### JBL Tune Flex 2
- Command service: found, connected
- Read-only queries (sent → replies):
- battery: `AA 25 01 00` → `AA 25 0D 01 00 00 53 5E 00 55 53 00 A3 10 55 00`
- device info: `AA 11 00` → `AA 12 25 4A 42 4C ... xx xx xx xx xx xx ...`JblTray, tepsi menüsündeki "Başlangıç" alt menüsü altında üç otomasyon seçeneği sunar (Startup.cs):
- Windows açılışında başlat (
RunAtLogon): Görev Zamanlayıcı'daJblTray-AtLogonadında bir görev oluşturur. Kullanıcı oturum açtıktan sonra Bluetooth yığını ve sistem tepsisinin hazır olması için 20 saniyelik gecikmeyle (<Delay>PT20S</Delay>) uygulamayı--trayparametresiyle başlatır. - Kulaklık bağlanınca başlat (
RunOnConnect): Görev Zamanlayıcı'daJblTray-OnHeadphoneConnectadında bir görev oluşturur. Windows Ses hizmetinin operasyonel günlüğünü dinler (Microsoft-Windows-Audio/Operational, Event ID 65,NewState=1[Active]). Olay filtresi eşli JBL cihaz adlarına göre ayarlanır. Bağlantı algılandığında 2 saniye gecikmeyle uygulamayı başlatır. - Kulaklık yokken kapan (5 dk) (
IdleExit): Etkinleştirildiğinde, kulaklık 5 dakika boyunca bağlı değilse uygulamayı otomatik kapatır. Bu kural yalnızca uygulama otomatik olarak (--trayparametresiyle) başlatıldığında çalışır; elle açılan oturumlar kullanıcı kapatana kadar açık kalır.
Önemli Teknik Detaylar:
- Görevler standart kullanıcı yetkisiyle kurulur (
LeastPrivilege); yönetici (Administrator) izni gerekmez. - Kayıt Defteri
Runanahtarı yerine Görev Zamanlayıcı kullanılmasının nedeni, Windows 11'inStartupApprovedkaydı olmayan girdileri sessizce atlayabilmesi ve başlangıç araçları tarafından engellenebilmesidir. - Not: Windows'a yeni bir JBL kulaklık eşlerseniz, "Kulaklık bağlanınca başlat" seçeneğini kapatıp tekrar açın; böylece yeni cihaz adı Görev Zamanlayıcı filtre XML'ine eklenir.
- Kulaklık bulunamıyor / bağlı değil: Kulaklığınızı öncelikle Windows Bluetooth ayarlarından eşlediğinizden emin olun. Kulaklık kutudaysa veya kapalıysa BLE GATT yayını durur. Kulaklıkları kutudan çıkarıp kulağınıza takın ve kontrol penceresindeki "Yenile" butonuna tıklayın.
- Raporda "LE device not reachable" yazıyor: Kulaklık kapalı, kutu kapağı kapalı veya Bluetooth menzili dışındadır.
- Birden fazla JBL cihazı eşli (örn. hoparlör): JblTray adı "JBL" ile başlayan cihazları tarar. Komut servisi bulunmayan cihazlar (örn. standart JBL Go/Flip hoparlörler) otomatik olarak atlanır. En son başarıyla bağlanan cihaza öncelik verilir.
- Açılışta WebView2 hatası: Kontrol penceresi Microsoft Edge WebView2 Runtime gerektirir (Windows 11'de yüklü gelir). Windows 10 kullanıyorsanız ve hata alıyorsanız, Microsoft'un resmî sitesinden ücretsiz Evergreen WebView2 Runtime paketini kurun.
- Windows SmartScreen uyarısı: Uygulama açık kaynaklı ve henüz dijital sertifikayla imzalanmamış olduğundan Windows mavi ekran uyarısı gösterebilir. Ek bilgi → Yine de çalıştır diyerek devam edebilirsiniz.
- Smart Audio & Video değişiminde sesin kısa süre kesilmesi: Bu durum donanımın doğal bir davranışıdır. Kulaklık yeni codec ve gecikme parametrelerini devreye sokmak için Bluetooth bağlantısını anlık olarak yeniler.
- Günlük (Log) Dosyası: Hata ve teşhis kayıtları yerel olarak
%TEMP%\jbltray.logdosyasında tutulur. - Ayarları Sıfırlama: Tüm kullanıcı tercihleri (dil, başlangıç, son adres) Windows Kayıt Defteri'nde
HKCU\Software\JblTrayaltında saklanır. Bu anahtar silinerek ayarlar fabrika ayarlarına döndürülebilir.
- Tepsi menüsünden Başlangıç seçeneğine gidin ve hem "Windows açılışında başlat" hem de "Kulaklık bağlanınca başlat" seçeneklerinin işaretini kaldırın (bu işlem
JblTray-AtLogonveJblTray-OnHeadphoneConnectzamanlanmış görevlerini temizler). - Tepsi simgesine sağ tıklayıp Çıkış seçeneğine tıklayın.
JblTray.exedosyasının bulunduğu klasörü silin.- (İsteğe bağlı) Kayıt defterindeki
HKCU\Software\JblTrayanahtarını ve%TEMP%\jbltray.logdosyasını silin.
- Cihaz Keşfi: Windows'a eşlenmiş ve adı "JBL" ile başlayan cihazlar listelenir. Protokol şifresiz olduğundan çevredeki eşlenmemiş yabancı cihazlara asla bağlanılmaz. En son bağlanan adres öncelikli olarak yoklanır.
- Olay Tabanlı Yapı & Tarama Döngüsü: Kulaklık bağlı değilken radyo kirliliğini ve pil tüketimini önlemek için BLE reklam taraması 20 saniye aktif tarama / 40 saniye dinlenme döngüsüyle yürütülür. Kulaklık koptuğunda beklemeden hemen taramaya dönülür.
- Bağlıyken Durum Güncellemesi: Bağlantı kurulduğunda sürekli yoklama (polling) yapılmaz; kulaklık ayar değişikliklerini kendiliğinden bildirir. Güvence amacıyla bağlıyken her 10 dakikada bir (600 saniye) pil ve özellik durumu arka planda tazelenir.
- Paket Biçimi: BLE GATT Servis UUID
65786365-6c70-6f69-6e74-2e636f6d0000("excelpoint.com"). Yazma karakteristiği TX...0002(WriteRequest), bildirim karakteristiği RX...0001(Notify). Paketler uygulama katmanında sağlama toplamı (checksum) içermeyen[0xAA] [CMD] [LEN] [PAYLOAD]çerçeveleridir. - Protokol Detayları: Tersine mühendislikle elde edilen tüm bayt tabloları ve komut dökümleri için PROTOCOL.md belgesine bakın.
.NET 8 SDK gereklidir.
# Standart derleme
dotnet build src -c Release
# Dağıtılan sürüm paketi gibi tek parça bağımsız derleme
dotnet publish src -c Release -r win-x64 --self-contained true -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true -p:EnableCompressionInSingleFile=true -p:DebugType=none -o dist/JblTray(Not: Derleme süreci ui.html dosyasını otomatik olarak JblTray.exe yanına kopyalar.)
-
src/-
JblDevice.cs: BLE GATT haberleşme çekirdeği, cihaz keşfi, reklam dinleyicisi, paket ayrıştırma/gönderme ve cihaz raporu motoru. -
TrayContext.cs: Uygulama yaşam döngüsü, dinamik tepsi simgeleri (kulaklık durumu ve pil seviyeleri), bağlam menüsü ve boşta kapanma sayacı. -
MainForm.cs: WebView2 arayüz formu, çift yönlü C#$\leftrightarrow$ JavaScript köprüsü ve pencere gizleme mantığı. -
Startup.cs: Windows Görev Zamanlayıcı entegrasyonu (schtasks.exe), ses günlüğü olay XPath XML filtresi ve kayıt defteri ayarları. -
Lang.cs: Çoklu dil desteği (Türkçe / İngilizce) ve anlık arayüz tazeleme olayları. -
Program.cs: Giriş noktası, tek örnek (Mutex) denetimi, komut satırı argümanları (--tray,--autostart) ve genel hata yakalama. -
ui.html: WebView2 için modern koyu tema arayüz, kaydırıcılar, Font Awesome simgeleri ve JavaScript durum yönetimi.
-
-
docs/: Uyumluluk dökümü (COMPATIBILITY.md) ve ekran görüntüsü (ekran.png). -
.github/ISSUE_TEMPLATE/: GitHub sorun şablonları (device-report.yml). -
PROTOCOL.md: Tersine mühendislikle çözümlenmiş JBL BLE GATT protokolü teknik detayları.
Projeye katkıda bulunmaktan çekinmeyin! Yeni cihaz raporları göndererek, hata bildirerek, çevirileri iyileştirerek veya protokol analizine destek vererek katkı sağlayabilirsiniz.
Protokol Çözümleme Desteği:
- Hazır ve özel EQ ayarları (
cmd 0x40,0x41) — paket yapısı henüz tam çözülmedi. - Dokunma jestlerini özelleştirme (
cmd 0x71,0x77) — analiz bekliyor.
Yol Haritası (Roadmap — Planlanan / Henüz Yapılmadı):
- [Planned] Modele göre desteklenen özellikleri dinamik gösterme/gizleme.
- [Planned] Grafik Ekolayzer (EQ) profil seçimi ve özel bant kaydırıcıları.
- [Planned] Dokunma jestlerini yapılandırma arayüzü.
- [Planned] Kafa bantlı (kulak üstü) modeller için tekil pil göstergesi modu.
- Telemetri Yok: Hiçbir kullanım veya analiz verisi toplanmaz veya iletilmez.
- Ağ Erişimi: Yalnızca WebView2 içinde Google Fonts (Inter) ve Font Awesome simgelerini CDN üzerinden yüklemekle sınırlıdır.
- Yerel Günlükler: Tanılama günlükleri yalnızca yerel makinede
%TEMP%\jbltray.logdosyasında tutulur. - Kayıt Defteri: Yalnızca
HKCU\Software\JblTrayaltında temel tercihler saklanır.
Bu proje açık kaynaklı ve resmî olmayan bir yazılımdır. HARMAN International veya JBL ile hiçbir bağlantısı, sponsorluğu veya onayı yoktur. JBL, HARMAN International Industries, Incorporated şirketinin tescilli ticari markasıdır. Kullanımdan doğabilecek tüm sorumluluk kullanıcıya aittir.
Bu proje MIT Lisansı altında dağıtılmaktadır.
