mirror of
https://github.com/CharaChorder/DeviceManager.git
synced 2026-01-21 17:32:41 +00:00
feat: update m4g
This commit is contained in:
@@ -5,20 +5,33 @@ col:
|
|||||||
row:
|
row:
|
||||||
- switch: { e: 26, n: 27, w: 28, s: 29 }
|
- switch: { e: 26, n: 27, w: 28, s: 29 }
|
||||||
- switch: { e: 21, n: 22, w: 23, s: 24 }
|
- switch: { e: 21, n: 22, w: 23, s: 24 }
|
||||||
|
- offset: [4, 0]
|
||||||
|
switch: { w: 66, n: 67, e: 68, s: 69 }
|
||||||
|
- switch: { w: 71, n: 72, e: 73, s: 74 }
|
||||||
- offset: [2, 0]
|
- offset: [2, 0]
|
||||||
row:
|
row:
|
||||||
- switch: { e: 41, n: 42, w: 43, s: 44 }
|
- switch: { e: 41, n: 42, w: 43, s: 44 }
|
||||||
- switch: { e: 36, n: 37, w: 38, s: 39 }
|
- switch: { e: 36, n: 37, w: 38, s: 39 }
|
||||||
|
- offset: [4, 0]
|
||||||
|
switch: { w: 81, n: 82, e: 83, s: 84 }
|
||||||
|
- switch: { w: 86, n: 87, e: 88, s: 89 }
|
||||||
# Pinkie / Index
|
# Pinkie / Index
|
||||||
- offset: [0, -3]
|
- offset: [0, -3]
|
||||||
row:
|
row:
|
||||||
- switch: { e: 31, n: 32, w: 33, s: 34 }
|
- switch: { e: 31, n: 32, w: 33, s: 34 }
|
||||||
- offset: [4, 0]
|
- offset: [4, 0]
|
||||||
switch: { e: 16, n: 17, w: 18, s: 19 }
|
switch: { e: 16, n: 17, w: 18, s: 19 }
|
||||||
|
- switch: { w: 61, n: 62, e: 63, s: 64 }
|
||||||
|
- offset: [4, 0]
|
||||||
|
switch: { w: 76, n: 77, e: 78, s: 79 }
|
||||||
# Thumbs
|
# Thumbs
|
||||||
- row:
|
- row:
|
||||||
- offset: [5.5, 0.5]
|
- offset: [5.5, 0.5]
|
||||||
switch: { e: 11, n: 12, w: 13, s: 14 }
|
switch: { e: 11, n: 12, w: 13, s: 14 }
|
||||||
|
- offset: [1, 0.5]
|
||||||
|
switch: { w: 56, n: 57, e: 58, s: 59 }
|
||||||
- row:
|
- row:
|
||||||
- offset: [4.5, -0.25]
|
- offset: [4.5, -0.25]
|
||||||
switch: { e: 6, n: 7, w: 8, s: 9 }
|
switch: { e: 6, n: 7, w: 8, s: 9 }
|
||||||
|
- offset: [3, -0.25]
|
||||||
|
switch: { w: 51, n: 52, e: 53, s: 54 }
|
||||||
|
|||||||
@@ -1,24 +1,37 @@
|
|||||||
name: M4GR
|
name: M4G
|
||||||
col:
|
col:
|
||||||
# Ring / Middle
|
# Ring / Middle
|
||||||
- offset: [2, 0]
|
- offset: [2, 0]
|
||||||
row:
|
row:
|
||||||
- switch: { e: 23, n: 22, w: 21, s: 24 }
|
- switch: { e: 26, n: 27, w: 28, s: 29 }
|
||||||
- switch: { e: 28, n: 27, w: 26, s: 29 }
|
- switch: { e: 21, n: 22, w: 23, s: 24 }
|
||||||
|
- offset: [4, 0]
|
||||||
|
switch: { w: 66, n: 67, e: 68, s: 69 }
|
||||||
|
- switch: { w: 71, n: 72, e: 73, s: 74 }
|
||||||
- offset: [2, 0]
|
- offset: [2, 0]
|
||||||
row:
|
row:
|
||||||
- switch: { e: 38, n: 37, w: 36, s: 39 }
|
- switch: { e: 41, n: 42, w: 43, s: 44 }
|
||||||
- switch: { e: 43, n: 42, w: 41, s: 44 }
|
- switch: { e: 36, n: 37, w: 38, s: 39 }
|
||||||
|
- offset: [4, 0]
|
||||||
|
switch: { w: 81, n: 82, e: 83, s: 84 }
|
||||||
|
- switch: { w: 86, n: 87, e: 88, s: 89 }
|
||||||
# Pinkie / Index
|
# Pinkie / Index
|
||||||
- offset: [0, -3]
|
- offset: [0, -3]
|
||||||
row:
|
row:
|
||||||
- switch: { e: 18, n: 17, w: 16, s: 19 }
|
- switch: { e: 31, n: 32, w: 33, s: 34 }
|
||||||
- offset: [4, 0]
|
- offset: [4, 0]
|
||||||
switch: { e: 33, n: 32, w: 31, s: 34 }
|
switch: { e: 16, n: 17, w: 18, s: 19 }
|
||||||
|
- switch: { w: 61, n: 62, e: 63, s: 64 }
|
||||||
|
- offset: [4, 0]
|
||||||
|
switch: { w: 76, n: 77, e: 78, s: 79 }
|
||||||
# Thumbs
|
# Thumbs
|
||||||
- row:
|
- row:
|
||||||
- offset: [0.5, 0.5]
|
- offset: [5.5, 0.5]
|
||||||
switch: { e: 13, n: 12, w: 11, s: 14 }
|
switch: { e: 11, n: 12, w: 13, s: 14 }
|
||||||
|
- offset: [1, 0.5]
|
||||||
|
switch: { w: 56, n: 57, e: 58, s: 59 }
|
||||||
- row:
|
- row:
|
||||||
- offset: [1.5, -0.25]
|
- offset: [4.5, -0.25]
|
||||||
switch: { e: 8, n: 7, w: 6, s: 9 }
|
switch: { e: 6, n: 7, w: 8, s: 9 }
|
||||||
|
- offset: [3, -0.25]
|
||||||
|
switch: { w: 51, n: 52, e: 53, s: 54 }
|
||||||
|
|||||||
@@ -25,8 +25,8 @@ const KEY_COUNTS = {
|
|||||||
TWO: 90,
|
TWO: 90,
|
||||||
LITE: 67,
|
LITE: 67,
|
||||||
X: 256,
|
X: 256,
|
||||||
M4G: 64,
|
M4G: 90,
|
||||||
M4GR: 64,
|
M4GR: 90,
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
if (
|
if (
|
||||||
|
|||||||
@@ -113,8 +113,9 @@
|
|||||||
const { Transport, ESPLoader } = await import("esptool-js");
|
const { Transport, ESPLoader } = await import("esptool-js");
|
||||||
const espLoader = new ESPLoader({
|
const espLoader = new ESPLoader({
|
||||||
transport: new Transport(port),
|
transport: new Transport(port),
|
||||||
baudrate: Number(esptool.baud),
|
baudrate: 9600, // Number(esptool.baud),
|
||||||
romBaudrate: Number(esptool.baud),
|
romBaudrate: 9600, // Number(esptool.baud),
|
||||||
|
debugLogging: true,
|
||||||
terminal: {
|
terminal: {
|
||||||
clean: () => {
|
clean: () => {
|
||||||
terminalOutput = "";
|
terminalOutput = "";
|
||||||
@@ -127,8 +128,10 @@
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
} satisfies LoaderOptions);
|
} satisfies LoaderOptions);
|
||||||
await espLoader.connect(esptool.before);
|
await espLoader.detectChip(esptool.before);
|
||||||
|
if (!espLoader.IS_STUB) {
|
||||||
await espLoader.runStub();
|
await espLoader.runStub();
|
||||||
|
}
|
||||||
|
|
||||||
return espLoader;
|
return espLoader;
|
||||||
}
|
}
|
||||||
@@ -162,6 +165,25 @@
|
|||||||
port.close();
|
port.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function eraseSPI() {
|
||||||
|
const port = await navigator.serial.requestPort();
|
||||||
|
try {
|
||||||
|
console.log(data.meta);
|
||||||
|
const spiFlash = data.meta.spi_flash!;
|
||||||
|
espLoader = await connectEsp(port);
|
||||||
|
|
||||||
|
/*espLoader.flashSpiAttach(
|
||||||
|
(spiFlash.connection.clk << 0) |
|
||||||
|
(spiFlash.connection.q << 8) |
|
||||||
|
(spiFlash.connection.d << 16) |
|
||||||
|
(spiFlash.connection.cs << 24),
|
||||||
|
);
|
||||||
|
espLoader.flashId();*/
|
||||||
|
} finally {
|
||||||
|
port.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="container">
|
<div class="container">
|
||||||
@@ -288,6 +310,9 @@
|
|||||||
<label
|
<label
|
||||||
><input type="checkbox" id="erase" bind:checked={eraseAll} />Erase All</label
|
><input type="checkbox" id="erase" bind:checked={eraseAll} />Erase All</label
|
||||||
>
|
>
|
||||||
|
<button onclick={eraseSPI}
|
||||||
|
><span class="icon">developer_board</span>Erase SPI Flash</button
|
||||||
|
>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<pre>{terminalOutput}</pre>
|
<pre>{terminalOutput}</pre>
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ export const load = (async ({ fetch, params }) => {
|
|||||||
(entry) =>
|
(entry) =>
|
||||||
entry.type === "file" && (!meta?.files || entry.name in meta.files),
|
entry.type === "file" && (!meta?.files || entry.name in meta.files),
|
||||||
) as FileListing[],
|
) as FileListing[],
|
||||||
|
spi_flash: meta?.spi_flash ?? undefined,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
}) satisfies PageLoad;
|
}) satisfies PageLoad;
|
||||||
|
|||||||
@@ -12,6 +12,21 @@ export interface VersionMeta {
|
|||||||
esptool: EspToolData | null;
|
esptool: EspToolData | null;
|
||||||
};
|
};
|
||||||
files: string[];
|
files: string[];
|
||||||
|
spi_flash: SPIFlashInfo | null;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface SPIFlashInfo {
|
||||||
|
type: string;
|
||||||
|
size: string;
|
||||||
|
connection: SPIConnection;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface SPIConnection {
|
||||||
|
clk: number;
|
||||||
|
q: number;
|
||||||
|
d: number;
|
||||||
|
hd: number;
|
||||||
|
cs: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface EspToolData {
|
export interface EspToolData {
|
||||||
|
|||||||
Reference in New Issue
Block a user