Eklenti Oluşturma
RGB verilerimizi izole ettiğimize göre eklentimizi oluşturmaya başlayabiliriz.
Eklenti oluşturmaya başlamak için bir metin düzenleyici açıp aşağıdaki metni yapıştıracağız.
export function Name() { return ""; }export function VendorId() { return ; }export function ProductId() { return ; }export function Publisher() { return ""; }export function Documentation(){ return "troubleshooting/brand"; }export function Size() { return [1,1]; }export function ControllableParameters() { return [ {"property":"shutdownColor", "group":"lighting", "label":"Shutdown Color", "min":"0", "max":"360", "type":"color", "default":"009bde"}, {"property":"LightingMode", "group":"lighting", "label":"Lighting Mode", "type":"combobox", "values":["Canvas", "Forced"], "default":"Canvas"}, {"property":"forcedColor", "group":"lighting", "label":"Forced Color", "min":"0", "max":"360", "type":"color", "default":"009bde"}, ];}
export function Initialize() {
}
var vLedNames = [ "Led 1" ];var vLedPositions = [ [0,0] ];
export function LedNames() {
}
export function LedPositions() {
}
export function Render() {
}
export function Shutdown() {
}
function hexToRgb(hex) { let result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex); let colors = []; colors[0] = parseInt(result[1], 16); colors[1] = parseInt(result[2], 16); colors[2] = parseInt(result[3], 16);
return colors;}
export function Validate(endpoint) { return endpoint.interface === 0 && endpoint.usage === 0 && endpoint.usage_page === 0;}
export function ImageUrl() { return "";}Yukarıdaki metin, bir cihaz eklentisi için temel bir düzendir.
Eklentinin üstündeki alanları cihazımız için bilgilerle doldurmaya başlayacağız.
Ad alanını cihazın adıyla doldurabiliriz.
Satıcı ve Ürün Kimliklerini Bulma
Section titled “Satıcı ve Ürün Kimliklerini Bulma”Satıcı Kimliği ve Ürün Kimliğini bulmak için önce sol alt köşedeki çark simgesini kullanarak SignalRGB’nin ayarlar menüsünü açmamız gerekiyor.

Şimdi Cihaz Bilgileri sayfasına gitmemiz gerekiyor.

Uyguladığımız cihaz için SatıcıKimliği ve ÜrünKimliğini arıyoruz. Benim durumumda bu Corsair Scimitar Pro. Scimitar’ın Satıcı Kimliği 0x1b1c ve Ürün Kimliği 0x1b3e’dir.

Satıcı ve Ürün Kimliğine sahip olduğumuza göre, bu alanları eklentide doldurabiliriz.
Yayıncı alanını doldurmak için adınızı yazabilirsiniz!
Şimdilik doldurabildiğimiz tüm alanları doldurduk.
İşte alanlar doldurulmuş Scimitar Pro için örneğimiz.

RGB Paketi Oluşturma
Section titled “RGB Paketi Oluşturma”Ardından, cihazımıza renk verisi göndermek için bir fonksiyon oluşturmamız gerekiyor. Aşağıdaki gibi basit bir fonksiyon oluşturarak başlayacağız:
function sendColors(shutdown = false){ let packet = [];}Ardından, işaretlediğimiz RGB paketlerinden birindeki verileri kullanarak paketimizi bazı verilerle doldurmaya başlamamız gerekiyor.
- NOT: Bu cihaz sıfır dolgulu. Bu, tüm baytlarımızı 1 konum yukarı kaydırmamız gerektiği anlamına gelir. Sıfır dolgu hakkında buradan bilgi edinin.

function sendColors(shutdown = false){ let packet = []; packet[0] = 0x00; packet[1] = 0x07; packet[2] = 0x22; packet[3] = 0x05; packet[4] = 0x01;
}Yukarıda gösterildiği gibi paket için başlık verilerini doldurmaya başlıyoruz. 5. konum RGB ile ilgili ilk baytımız olduğundan 4. konumda duruyoruz.
Paket Türünü Belirleme
Section titled “Paket Türünü Belirleme”Ardından renk doldurma sistemimizi oluşturmamız gerekiyor. Bunun yapılabileceği birkaç farklı yol var. Kullanılan yöntem, cihazın paket yapısına bağlıdır. İşte birkaç farklı renk paketi örneği:
function sendZone(zone, shutdown = false){ let packet = []; packet[0] = LongMessage; packet[1] = ConnectionMode; packet[2] = RGBFeatureID; packet[3] = 0x30; packet[4] = zone; packet[5] = 0x01;
var iX = vLedPositions[zone][0]; var iY = vLedPositions[zone][1]; var color; if(shutdown) { color = hexToRgb(shutdownColor); } else if (LightingMode == "Forced") { color = hexToRgb(forcedColor); } else { color = device.color(iX, iY); } packet[6] = color[0]; packet[7] = color[1]; packet[8] = color[2]; packet[9] = 0x02;
device.write(packet, 120);}
function SendPacket(shutdown = false){ let packet = []; packet[0] = 0x00; packet[1] = 0x00; packet[2] = 0x1F; packet[3] = 0x00; packet[4] = 0x00; packet[5] = 0x00; packet[6] = 0x41; packet[7] = 0x0F; packet[8] = 0x03; packet[13] = 0x13;
for(let iIdx = 0; iIdx < vLedPositions.length; iIdx++) {
let iPxX = vLedPositions[iIdx][0]; let iPxY = vLedPositions[iIdx][1]; var color;
if(shutdown) { color = hexToRgb(shutdownColor); } else if (LightingMode === "Forced") { color = hexToRgb(forcedColor); } else { color = device.color(iPxX, iPxY); }
let iLedIdx = (iIdx*3) + 14; packet[iLedIdx] = color[0]; packet[iLedIdx+1] = color[1]; packet[iLedIdx+2] = color[2]; } device.write(packet, 120);}
function sendColors(shutdown = false){
let packet = []; packet[0x00] = 0x00; packet[0x01] = 0x08; packet[0x02] = 0x12; packet[0x03] = 0x05; packet[0x04] = 0x01;
let zoneId = [1, 2, 3, 4, 5];
for(let zone_idx = 0; zone_idx < vLedPositions.length; zone_idx++) { let iX = vLedPositions[zone_idx][0]; let iY = vLedPositions[zone_idx][1]; var col;
if(shutdown){ col = hexToRgb(shutdownColor); }else if (LightingMode === "Forced") { col = hexToRgb(forcedColor); }else{ col = device.color(iX, iY); }
packet[(zone_idx * 4) + 2] = zoneId[zone_idx]; packet[(zone_idx * 4) + 3] = col[0]; packet[(zone_idx * 4) + 4] = col[1]; packet[(zone_idx * 4) + 5] = col[2]; }
device.write(packet, 120);}Yukarıdaki üç örnek, her biri farklı bir paket yapısı için uygundur. sendZone fonksiyonu, her LED için ayrı bir paket kullanan cihazlar için uygundur. sendPacket fonksiyonu, tek bir paket içinde arka arkaya birden fazla LED gönderen cihazlar için daha uygundur. sendColors fonksiyonu, pakette birden fazla LED olan ancak bunların doğrudan art arda gelmediği cihazlar için uygundur. Bizim durumumuzda sendColors fonksiyonunu kullanacağız.
function sendColors(shutdown = false){ let packet = [];
packet[0] = 0x00; packet[1] = 0x07; packet[2] = 0x22; packet[3] = 0x05; packet[4] = 0x01;
let zoneId = [2, 4, 5, 1, 3];
for(let zone_idx = 0; zone_idx < vLedPositions.length; zone_idx++) { let iX = vLedPositions[zone_idx][0]; let iY = vLedPositions[zone_idx][1]; var col;
if(shutdown){ col = hexToRgb(shutdownColor); }else if (LightingMode === "Forced") { col = hexToRgb(forcedColor); }else{ col = device.color(iX, iY); }
packet[(zone_idx * 1) + 2] = zoneId[zone_idx]; packet[(zone_idx * 1) + 3] = col[0]; packet[(zone_idx * 1) + 4] = col[1]; packet[(zone_idx * 1) + 5] = col[2]; }
packet[21] = 0xff; packet[22] = 0xff; packet[23] = 0xff;
device.write(packet, 120);}sendColors fonksiyonunu düzgün şekilde ayarlamak için cihazımızın Bölge Kimliklerini bulmamız gerekiyor. Paket yakalamaya tekrar bakıldığında bölge sırasının aşağıda gösterildiği gibi 2,4,5,1,3 olduğu görülüyor. DPI LED’ini de adresleyebildiğimize göre 5. bölgeyi eklediğimizi fark edin.

Bölge Kimliklerimizi çözdüğümüze göre, zone_idx için ofsetlerimizi bulmamız gerekiyor. İlk bölgemiz packet[4]‘te, ikinci bölgemiz ise packet[8]‘de. Bu, yeni bir LED’e ulaşmak için zone_idx’imizin her seferinde 4 ile çarpılması gerektiği anlamına gelir. Ayrıca RGB verilerini kaç pozisyon kaydırdığımızı bulmamız gerekiyor. İlk bölgemiz packet[5]‘te olduğundan paketi aşağıda gösterildiği gibi yalnızca 5 bayt kaydırmamız gerekiyor.
function sendColors(shutdown = false){ let packet = []; packet[0] = 0x00; packet[1] = 0x07; packet[2] = 0x22; packet[3] = 0x05; packet[4] = 0x01;
let zoneId = [2, 4, 5, 1, 3];
for(let zone_idx = 0; zone_idx < vLedPositions.length; zone_idx++) { let iX = vLedPositions[zone_idx][0]; let iY = vLedPositions[zone_idx][1]; var col;
if(shutdown){ col = hexToRgb(shutdownColor); }else if (LightingMode === "Forced") { col = hexToRgb(forcedColor); }else{ col = device.color(iX, iY); }
packet[(zone_idx * 4) + 5] = zoneId[zone_idx]; packet[(zone_idx * 4) + 6] = col[0]; packet[(zone_idx * 4) + 7] = col[1]; packet[(zone_idx * 4) + 8] = col[2]; }
device.write(packet, 65);}RGB paketimizi ayarladığımıza göre, LED’lerimizi ayarlamamız ve cihaz uç noktalarımızı seçmemiz gerekiyor.
Temel LED Kurulumu
Section titled “Temel LED Kurulumu”LED’lerimizi ayarlamak için vLedNames ve vLedPositions’a doğru sayıda LED eklememiz gerekiyor. Bizim durumumuzda, aşağıda gösterildiği gibi her birine dört LED daha eklememiz gerekiyor.
var vLedNames = [ "Led 1", "Led 2", "Led 3", "Led 4", "Led 5" ];var vLedPositions = [ [0,0], [1,0], [2,0], [3,0], [4,0] ];Bu dört LED’e şimdilik temel eşlemeler veriyoruz çünkü bu LED’lerin SignalRGB içindeki eşlemelere göre cihazda fiziksel olarak nerede olduğunu bilmiyoruz.
LED’lerimizi eşledikten sonra cihaz boyutumuzu ayarlamamız gerekiyor. Cihaz boyutumuzun her iki yönde de en uzaktaki LED’imizden bir büyük olması gerekiyor. Benim durumumda en uzaktaki LED [4,0]‘da olduğundan boyutun [5,1] olması gerekiyor.
export function Name() { return "Corsair Scimitar Pro"; }export function VendorId() { return 0x1b1c; }export function ProductId() { return 0x1B3E; }export function Publisher() { return "WhirlwindFX"; }export function Documentation(){ return "troubleshooting/corsair"; }export function Size() { return [5,1]; }Bundan sonra cihazımızın uç noktasını bulmamız gerekiyor.