From 44539e55d1c264c808fcc599d3f6aca6339375c0 Mon Sep 17 00:00:00 2001 From: Joshua Chung <87676426+jchu634@users.noreply.github.com> Date: Sat, 17 Oct 2026 17:36:55 +1100 Subject: [PATCH] Added 63 byte packets to motospeed filter --- src/drivers/motospeed/hid.test.ts | 28 +++++++++++++++++++++++----- src/drivers/motospeed/hid.ts | 2 +- 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/drivers/motospeed/hid.test.ts b/src/drivers/motospeed/hid.test.ts index c4f932ef..7370fe8e 100644 --- a/src/drivers/motospeed/hid.test.ts +++ b/src/drivers/motospeed/hid.test.ts @@ -183,8 +183,8 @@ it("reads settings with listener attached before send, ignoring unrelated input" assert.equal(device.opened, false); }); -it("accepts 60-byte B3 reports and rejects unsupported lengths", async () => { - for (const length of [60, 61, 63]) { +it("accepts 60- and 63-byte B3 reports and rejects unsupported lengths", async () => { + for (const length of [0, 59, 60, 61, 62, 63, 64]) { const device = new X6Device(); device.collections = [ { @@ -196,17 +196,35 @@ it("accepts 60-byte B3 reports and rejects unsupported lengths", async () => { }, ]; const client = new MotospeedHidClient(device); - if (length !== 60) { + if (length !== 0 && length !== 60 && length !== 63) { await assert.rejects(client.readStatus(), /payload length/); + await assert.rejects( + client.setButtonMapping(0, { kind: "disabled" }), + /payload length/, + ); + assert.equal(device.sent.length, 0); assert.equal(device.listeners.size, 0); continue; } await client.readStatus(); await client.setButtonMapping(0, { kind: "disabled" }); + await client.setDebounceTime(7); + const settingsLength = length || 63; assert.deepEqual( - device.sent.map((p) => p.data.length), - [length, length], + device.sent.map((p) => [p.reportId, p.data.length]), + [ + [0xb3, settingsLength], + [0xb3, settingsLength], + [0xb5, 20], + [0xb3, settingsLength], + ], ); + assert.deepEqual(device.sent[0].data, [ + 6, ...new Array(settingsLength - 1).fill(0), + ]); + assert.deepEqual(device.sent[1].data, [ + 0x52, 0, 0, 9, ...new Array(settingsLength - 4).fill(0), + ]); } }); diff --git a/src/drivers/motospeed/hid.ts b/src/drivers/motospeed/hid.ts index 8a46a903..427aac1b 100644 --- a/src/drivers/motospeed/hid.ts +++ b/src/drivers/motospeed/hid.ts @@ -405,7 +405,7 @@ export class MotospeedHidClient { ); if (length === 60) { data = data.slice(0, 60); - } else if (length !== 0) { + } else if (length !== 0 && length !== 63) { throw new Error( `Unsupported Motospeed settings report payload length ${length}.`, );