{
  "$schema": "https://o2csi.github.io/candeo/device-definition.schema.json",
  "name": "Razer BlackWidow V3 Pro (wireless)",
  "notes": [
    "Unverified: never tried on the device. Derived on 2026-09-27 from razer-deathstalker-v2-pro.json, verified on firmware v1.5, by derive.mjs.",
    "What differs: product id 025c, interface 3, transaction byte 3f, a 6×22 matrix (HyperSpeed wireless dongle).",
    "From OpenRGB, https://gitlab.com/CalcProgrammer1/OpenRGB, commit 0f8f2dcc (2026-09-25): Controllers/RazerController, for each model's matrix, read by openrgb.mjs, its interface and its transaction byte.",
    "From OpenRazer, https://github.com/openrazer/openrazer, commit 6820f9da (2026-07-05): driver/razerkbd_driver.c and daemon/openrazer_daemon/hardware/keyboards.py, for the same facts as seen from Linux.",
    "OpenRazer sends 9f in the transaction byte: if nothing lights, try it in every report.",
    "Drawn as an ISO board: on an ANSI one, the key left of Z is absent and the backslash lights with Enter. Lights that are not keys are placed by convention.",
    "The inspection is left out until someone confirms the device answers it.",
    "Does it light? Say so: https://github.com/o2csi/candeo/issues/new?template=device-report.yml"
  ],
  "match": { "vid": "1532", "pid": "025c", "interface": 3 },
  "report": {
    "wire": "feature",
    "length": 90,
    "prefix": "00",
    "checksum": { "function": "xor", "from": 2, "to": 87, "at": 88 },
    "command": { "class": 6, "id": 7 }
  },
  "frame": {
    "each": {
      "by": "row",
      "send": ["00 3f 00 00 00 {length:8} 0f 03 00 00 {row} {start} {end} {lights}"],
      "light": "{r} {g} {b}"
    },
    "close": ["00 3f 00 00 00 06 0f 02 00 00 08 00 00 00"]
  },
  "brightness": ["00 3f 00 00 00 03 0f 04 00 00 {level}"],
  "firmware": {
    "send": "00 3f 00 00 00 06 0f 02 00 00 {kind} 00 00 00",
    "off": "00",
    "effects": [
      {
        "id": "hardware:spectrumCycle",
        "kind": "03",
        "looks": "spectrum",
        "name": "Spectrum Cycle",
        "summary": {
          "en": "The whole keyboard changes hue together, endlessly.",
          "fr": "Tout le clavier change de teinte ensemble, sans fin."
        }
      },
      {
        "id": "hardware:wave",
        "kind": "04",
        "looks": "wave",
        "send": "00 3f 00 00 00 06 0f 02 00 00 04 02 28 00",
        "name": "Wave",
        "summary": {
          "en": "A gradient crosses the keyboard from side to side.",
          "fr": "Un dégradé traverse le clavier de part en part."
        }
      }
    ]
  },
  "lights": {
    "kind": "keys",
    "rows": 6,
    "cols": 22,
    "items": [
      { "row": 0, "col": 0, "address": 0, "scancode": "01", "rect": [0, 0, 1, 1] },
      { "row": 0, "col": 2, "address": 2, "scancode": "3b", "rect": [2, 0, 1, 1] },
      { "row": 0, "col": 3, "address": 3, "scancode": "3c", "rect": [3, 0, 1, 1] },
      { "row": 0, "col": 4, "address": 4, "scancode": "3d", "rect": [4, 0, 1, 1] },
      { "row": 0, "col": 5, "address": 5, "scancode": "3e", "rect": [5, 0, 1, 1] },
      { "row": 0, "col": 6, "address": 6, "scancode": "3f", "rect": [6.5, 0, 1, 1] },
      { "row": 0, "col": 7, "address": 7, "scancode": "40", "rect": [7.5, 0, 1, 1] },
      { "row": 0, "col": 8, "address": 8, "scancode": "41", "rect": [8.5, 0, 1, 1] },
      { "row": 0, "col": 9, "address": 9, "scancode": "42", "rect": [9.5, 0, 1, 1] },
      { "row": 0, "col": 10, "address": 10, "scancode": "43", "rect": [11, 0, 1, 1] },
      { "row": 0, "col": 11, "address": 11, "scancode": "44", "rect": [12, 0, 1, 1] },
      { "row": 0, "col": 12, "address": 12, "scancode": "57", "rect": [13, 0, 1, 1] },
      { "row": 0, "col": 13, "address": 13, "scancode": "58", "rect": [14, 0, 1, 1] },
      { "row": 0, "col": 14, "address": 14, "scancode": "e037", "rect": [15.25, 0, 1, 1] },
      { "row": 0, "col": 15, "address": 15, "scancode": "46", "rect": [16.25, 0, 1, 1] },
      { "row": 0, "col": 16, "address": 16, "scancode": "e11d", "rect": [17.25, 0, 1, 1] },
      { "row": 0, "col": 18, "address": 18, "scancode": "e010", "rect": [18.5, 0, 1, 1] },
      { "row": 0, "col": 19, "address": 19, "scancode": "e022", "rect": [19.5, 0, 1, 1] },
      { "row": 0, "col": 20, "address": 20, "scancode": "e019", "rect": [20.5, 0, 1, 1] },
      { "row": 0, "col": 21, "address": 21, "scancode": "e020", "rect": [21.5, 0, 1, 1] },
      { "row": 1, "col": 0, "address": 22, "scancode": "29", "rect": [0, 1.5, 1, 1] },
      { "row": 1, "col": 1, "address": 23, "scancode": "02", "rect": [1, 1.5, 1, 1] },
      { "row": 1, "col": 2, "address": 24, "scancode": "03", "rect": [2, 1.5, 1, 1] },
      { "row": 1, "col": 3, "address": 25, "scancode": "04", "rect": [3, 1.5, 1, 1] },
      { "row": 1, "col": 4, "address": 26, "scancode": "05", "rect": [4, 1.5, 1, 1] },
      { "row": 1, "col": 5, "address": 27, "scancode": "06", "rect": [5, 1.5, 1, 1] },
      { "row": 1, "col": 6, "address": 28, "scancode": "07", "rect": [6, 1.5, 1, 1] },
      { "row": 1, "col": 7, "address": 29, "scancode": "08", "rect": [7, 1.5, 1, 1] },
      { "row": 1, "col": 8, "address": 30, "scancode": "09", "rect": [8, 1.5, 1, 1] },
      { "row": 1, "col": 9, "address": 31, "scancode": "0a", "rect": [9, 1.5, 1, 1] },
      { "row": 1, "col": 10, "address": 32, "scancode": "0b", "rect": [10, 1.5, 1, 1] },
      { "row": 1, "col": 11, "address": 33, "scancode": "0c", "rect": [11, 1.5, 1, 1] },
      { "row": 1, "col": 12, "address": 34, "scancode": "0d", "rect": [12, 1.5, 1, 1] },
      { "row": 1, "col": 13, "address": 35, "scancode": "0e", "rect": [13, 1.5, 2, 1] },
      { "row": 1, "col": 14, "address": 36, "scancode": "e052", "rect": [15.25, 1.5, 1, 1] },
      { "row": 1, "col": 15, "address": 37, "scancode": "e047", "rect": [16.25, 1.5, 1, 1] },
      { "row": 1, "col": 16, "address": 38, "scancode": "e049", "rect": [17.25, 1.5, 1, 1] },
      { "row": 1, "col": 17, "address": 39, "scancode": "45", "rect": [18.5, 1.5, 1, 1] },
      { "row": 1, "col": 18, "address": 40, "scancode": "e035", "rect": [19.5, 1.5, 1, 1] },
      { "row": 1, "col": 19, "address": 41, "scancode": "37", "rect": [20.5, 1.5, 1, 1] },
      { "row": 1, "col": 20, "address": 42, "scancode": "4a", "rect": [21.5, 1.5, 1, 1] },
      { "row": 2, "col": 0, "address": 44, "scancode": "0f", "rect": [0, 2.5, 1.5, 1] },
      { "row": 2, "col": 1, "address": 45, "scancode": "10", "rect": [1.5, 2.5, 1, 1] },
      { "row": 2, "col": 2, "address": 46, "scancode": "11", "rect": [2.5, 2.5, 1, 1] },
      { "row": 2, "col": 3, "address": 47, "scancode": "12", "rect": [3.5, 2.5, 1, 1] },
      { "row": 2, "col": 4, "address": 48, "scancode": "13", "rect": [4.5, 2.5, 1, 1] },
      { "row": 2, "col": 5, "address": 49, "scancode": "14", "rect": [5.5, 2.5, 1, 1] },
      { "row": 2, "col": 6, "address": 50, "scancode": "15", "rect": [6.5, 2.5, 1, 1] },
      { "row": 2, "col": 7, "address": 51, "scancode": "16", "rect": [7.5, 2.5, 1, 1] },
      { "row": 2, "col": 8, "address": 52, "scancode": "17", "rect": [8.5, 2.5, 1, 1] },
      { "row": 2, "col": 9, "address": 53, "scancode": "18", "rect": [9.5, 2.5, 1, 1] },
      { "row": 2, "col": 10, "address": 54, "scancode": "19", "rect": [10.5, 2.5, 1, 1] },
      { "row": 2, "col": 11, "address": 55, "scancode": "1a", "rect": [11.5, 2.5, 1, 1] },
      { "row": 2, "col": 12, "address": 56, "scancode": "1b", "rect": [12.5, 2.5, 1, 1] },
      { "row": 2, "col": 13, "address": 57, "scancode": "1c", "rect": [13.5, 2.5, 1.5, 1] },
      { "row": 2, "col": 14, "address": 58, "scancode": "e053", "rect": [15.25, 2.5, 1, 1] },
      { "row": 2, "col": 15, "address": 59, "scancode": "e04f", "rect": [16.25, 2.5, 1, 1] },
      { "row": 2, "col": 16, "address": 60, "scancode": "e051", "rect": [17.25, 2.5, 1, 1] },
      { "row": 2, "col": 17, "address": 61, "scancode": "47", "rect": [18.5, 2.5, 1, 1] },
      { "row": 2, "col": 18, "address": 62, "scancode": "48", "rect": [19.5, 2.5, 1, 1] },
      { "row": 2, "col": 19, "address": 63, "scancode": "49", "rect": [20.5, 2.5, 1, 1] },
      { "row": 2, "col": 20, "address": 64, "scancode": "4e", "rect": [21.5, 2.5, 1, 2] },
      { "row": 3, "col": 0, "address": 66, "scancode": "3a", "rect": [0, 3.5, 1.75, 1] },
      { "row": 3, "col": 1, "address": 67, "scancode": "1e", "rect": [1.75, 3.5, 1, 1] },
      { "row": 3, "col": 2, "address": 68, "scancode": "1f", "rect": [2.75, 3.5, 1, 1] },
      { "row": 3, "col": 3, "address": 69, "scancode": "20", "rect": [3.75, 3.5, 1, 1] },
      { "row": 3, "col": 4, "address": 70, "scancode": "21", "rect": [4.75, 3.5, 1, 1] },
      { "row": 3, "col": 5, "address": 71, "scancode": "22", "rect": [5.75, 3.5, 1, 1] },
      { "row": 3, "col": 6, "address": 72, "scancode": "23", "rect": [6.75, 3.5, 1, 1] },
      { "row": 3, "col": 7, "address": 73, "scancode": "24", "rect": [7.75, 3.5, 1, 1] },
      { "row": 3, "col": 8, "address": 74, "scancode": "25", "rect": [8.75, 3.5, 1, 1] },
      { "row": 3, "col": 9, "address": 75, "scancode": "26", "rect": [9.75, 3.5, 1, 1] },
      { "row": 3, "col": 10, "address": 76, "scancode": "27", "rect": [10.75, 3.5, 1, 1] },
      { "row": 3, "col": 11, "address": 77, "scancode": "28", "rect": [11.75, 3.5, 1, 1] },
      { "row": 3, "col": 12, "address": 78, "scancode": "2b", "rect": [12.75, 3.5, 1, 1] },
      { "row": 3, "col": 13, "address": 79, "scancode": "1c", "rect": [13.75, 3.5, 1.25, 1] },
      { "row": 3, "col": 14, "address": 80, "name": "Logo", "shape": "disc", "rect": [6.5, 6.75, 0.5, 0.5] },
      { "row": 3, "col": 17, "address": 83, "scancode": "4b", "rect": [18.5, 3.5, 1, 1] },
      { "row": 3, "col": 18, "address": 84, "scancode": "4c", "rect": [19.5, 3.5, 1, 1] },
      { "row": 3, "col": 19, "address": 85, "scancode": "4d", "rect": [20.5, 3.5, 1, 1] },
      { "row": 4, "col": 0, "address": 88, "scancode": "2a", "rect": [0, 4.5, 1.25, 1] },
      { "row": 4, "col": 1, "address": 89, "scancode": "56", "rect": [1.25, 4.5, 1, 1] },
      { "row": 4, "col": 2, "address": 90, "scancode": "2c", "rect": [2.25, 4.5, 1, 1] },
      { "row": 4, "col": 3, "address": 91, "scancode": "2d", "rect": [3.25, 4.5, 1, 1] },
      { "row": 4, "col": 4, "address": 92, "scancode": "2e", "rect": [4.25, 4.5, 1, 1] },
      { "row": 4, "col": 5, "address": 93, "scancode": "2f", "rect": [5.25, 4.5, 1, 1] },
      { "row": 4, "col": 6, "address": 94, "scancode": "30", "rect": [6.25, 4.5, 1, 1] },
      { "row": 4, "col": 7, "address": 95, "scancode": "31", "rect": [7.25, 4.5, 1, 1] },
      { "row": 4, "col": 8, "address": 96, "scancode": "32", "rect": [8.25, 4.5, 1, 1] },
      { "row": 4, "col": 9, "address": 97, "scancode": "33", "rect": [9.25, 4.5, 1, 1] },
      { "row": 4, "col": 10, "address": 98, "scancode": "34", "rect": [10.25, 4.5, 1, 1] },
      { "row": 4, "col": 11, "address": 99, "scancode": "35", "rect": [11.25, 4.5, 1, 1] },
      { "row": 4, "col": 13, "address": 101, "scancode": "36", "rect": [12.25, 4.5, 2.75, 1] },
      { "row": 4, "col": 15, "address": 103, "scancode": "e048", "rect": [16.25, 4.5, 1, 1] },
      { "row": 4, "col": 17, "address": 105, "scancode": "4f", "rect": [18.5, 4.5, 1, 1] },
      { "row": 4, "col": 18, "address": 106, "scancode": "50", "rect": [19.5, 4.5, 1, 1] },
      { "row": 4, "col": 19, "address": 107, "scancode": "51", "rect": [20.5, 4.5, 1, 1] },
      { "row": 4, "col": 20, "address": 108, "scancode": "e01c", "rect": [21.5, 4.5, 1, 2] },
      { "row": 5, "col": 0, "address": 110, "scancode": "1d", "rect": [0, 5.5, 1.25, 1] },
      { "row": 5, "col": 1, "address": 111, "scancode": "e05b", "rect": [1.25, 5.5, 1.25, 1] },
      { "row": 5, "col": 2, "address": 112, "scancode": "38", "rect": [2.5, 5.5, 1.25, 1] },
      { "row": 5, "col": 6, "address": 116, "scancode": "39", "rect": [3.75, 5.5, 6.25, 1] },
      { "row": 5, "col": 10, "address": 120, "scancode": "e038", "rect": [10, 5.5, 1.25, 1] },
      { "row": 5, "col": 11, "address": 121, "rect": [11.25, 5.5, 1.25, 1] },
      { "row": 5, "col": 12, "address": 122, "scancode": "e05d", "rect": [12.5, 5.5, 1.25, 1] },
      { "row": 5, "col": 13, "address": 123, "scancode": "e01d", "rect": [13.75, 5.5, 1.25, 1] },
      { "row": 5, "col": 14, "address": 124, "scancode": "e04b", "rect": [15.25, 5.5, 1, 1] },
      { "row": 5, "col": 15, "address": 125, "scancode": "e050", "rect": [16.25, 5.5, 1, 1] },
      { "row": 5, "col": 16, "address": 126, "scancode": "e04d", "rect": [17.25, 5.5, 1, 1] },
      { "row": 5, "col": 18, "address": 128, "scancode": "52", "rect": [18.5, 5.5, 2, 1] },
      { "row": 5, "col": 19, "address": 129, "scancode": "53", "rect": [20.5, 5.5, 1, 1] }
    ]
  },
  "examples": [
    {
      "colours": ["ff0000", "00ff00", "0000ff"],
      "reports": [
        "00 3f 00 00 00 47 0f 03 00 00 00 00 15 ff 00 00 00 00 00 00 ff 00 00 00 ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 a1",
        "00 3f 00 00 00 47 0f 03 00 00 01 00 15 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 5f",
        "00 3f 00 00 00 47 0f 03 00 00 02 00 15 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 5c",
        "00 3f 00 00 00 47 0f 03 00 00 03 00 15 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 5d",
        "00 3f 00 00 00 47 0f 03 00 00 04 00 15 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 5a",
        "00 3f 00 00 00 47 0f 03 00 00 05 00 15 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 5b",
        "00 3f 00 00 00 06 0f 02 00 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 03"
      ]
    }
  ]
}
