Logi Options+ için companion plugin — bir pipe server açar, gelen event'leri host SDK haptic waveform'larına çevirip MX Master 4'e gönderir.
Resmi olmayan, topluluk plugin'i. Logitech ile bağlantılı değildir.
-
Logi Options+ kurulu olmalı (plugin service +
PluginApi.dllsağlar)- Windows:
C:\Program Files\Logi\LogiPluginService\PluginApi.dll - macOS:
/Applications/Utilities/LogiPluginService.app/Contents/MonoBundle/PluginApi.dll
- Windows:
-
.NET 8 SDK
-
LogiPluginTool global .NET aracı (paketleme için):
dotnet tool install --global LogiPluginTool
logi-plugin/
├── src/
│ ├── Plugin.cs ← Loupedeck.Plugin entry
│ ├── Application.cs ← ClientApplication companion
│ ├── PipeServer.cs ← Named Pipe / Unix socket sunucusu
│ ├── HapticMapper.cs ← event → waveform eşleme
│ ├── PluginLog.cs ← SDK log wrapper
│ ├── HapticBridgeForUnity.Plugin.csproj
│ └── package/
│ ├── metadata/
│ │ ├── LoupedeckPackage.yaml ← manifest (plugin4, HasHapticsMapping)
│ │ └── Icon256x256.png
│ └── events/
│ ├── DefaultEventSource.yaml ← 15 waveform event'i
│ └── extra/
│ └── eventMapping.yaml ← haptic UI kaydı (haptics block)
└── build/ ← .lplug4 çıktıları
cd logi-plugin/src
dotnet build -c Releasecsproj otomatik olarak plugin service'in Plugins/ dizinine bir .link dosyası yazar ve reload tetikler — host plugin'i anında hot-reload eder.
cd logi-plugin/src
dotnet build -c Release
logiplugintool pack ../bin/Release ../build/HapticBridgeForUnity_0.1.1.lplug4Çıktı: logi-plugin/build/HapticBridgeForUnity_<version>.lplug4 — çift tıklanabilir kurulum dosyası.
PluginApi.dll Logi Options+ ile geldiği için CI'da alınamaz. Release'ler repo root'tan lokal olarak kesilir:
./scripts/release-plugin.sh 0.2.0Script şunları yapar:
- Manifest version'unu senkronize eder, commit'i push'lar
dotnet build -c Releaseçalıştırır.lplug4'ü paketlerplugin-v<version>tag'ını oluşturup push'lar.lplug4'ü asset olarak ekleyip GitHub Release açar
Gereksinimler: dotnet, logiplugintool, gh (GitHub CLI), temiz çalışma ağacı.
Load()→ 15 haptic waveform'uPluginEvents.AddEventile kaydeder, pipe server'ı başlatır- Unity client pipe'a bir event adı yazar (ör.
"success") HapticMapperonu SDK waveform'una çevirir (success → completed)PluginEvents.RaiseEvent("completed")→ MX Master 4 haptic pulse tetiklenir
İki dosya uyuşmazsa Logi Options+ plugin'i Haptic Feedback ekranında göstermez:
LoupedeckPackage.yaml→pluginCapabilitieslistesindeHasHapticsMapping(plural "s") olmalı.HasHapticMappingtek başına yeterli değil.events/extra/eventMapping.yaml→ plugin'in kaydettiği her waveform içinDEFAULT: <waveform>eşlemesi içeren birhaptics:block'u.
İkisi olmadan event'ler pipe'a düşer ama cihaz titremez — kullanıcı Logi Options+'tan bunları haptic çıkışına bağlayamaz.
.NET'in NamedPipeServerStream'i macOS'ta $TMPDIR/CoreFxPipe_<name> yolunda bir Unix Domain Socket açar. Dispose() socket dosyasını silmez ve bu, yeni plugin instance'ının bind etmesini bloklar (IO_AllPipeInstancesAreBusy). PipeServer bu hatayı yakalayıp socket'ı explicit unlink edip retry yapıyor.
15 SDK waveform'u: sharp_collision, sharp_state_change, knock, damp_collision, mad, ringing, subtle_collision, completed, jingle, damp_state_change, firework, happy_alert, wave, angry_alert, square.
Unity tarafı ya HapticEvent enum'unu (9 generic event) kullanır, ya da TriggerRaw("firework") ile doğrudan waveform adı gönderir.
SDK dokümantasyonu: https://logitech.github.io/actions-sdk-docs/