Skip to content

Commit ab0eb4a

Browse files
committed
doc(split): update split keyboard writeup
Signed-off-by: Haobo Gu <[email protected]>
1 parent 2fe07d7 commit ab0eb4a

File tree

2 files changed

+82
-9
lines changed

2 files changed

+82
-9
lines changed
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
<mxfile host="65bd71144e">
2+
<diagram id="umwl9duzn3Gf7_mlR7Q0" name="第 1 页">
3+
<mxGraphModel dx="987" dy="544" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
4+
<root>
5+
<mxCell id="0"/>
6+
<mxCell id="1" parent="0"/>
7+
<mxCell id="2" value="" style="rounded=0;whiteSpace=wrap;html=1;sketch=1;hachureGap=4;jiggle=2;curveFitting=1;fontFamily=Garamond;fontSize=20;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;connectable=1;" parent="1" vertex="1">
8+
<mxGeometry x="70" y="100" width="380" height="460" as="geometry"/>
9+
</mxCell>
10+
<mxCell id="59" value="" style="rounded=0;whiteSpace=wrap;html=1;sketch=1;hachureGap=4;jiggle=2;curveFitting=1;fontFamily=Comic Sans MS;fontSize=20;" vertex="1" parent="1">
11+
<mxGeometry x="250" y="140" width="140" height="150" as="geometry"/>
12+
</mxCell>
13+
<mxCell id="3" value="" style="rounded=0;whiteSpace=wrap;html=1;sketch=1;hachureGap=4;jiggle=2;curveFitting=1;fontFamily=Garamond;fontSize=20;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;connectable=1;" parent="1" vertex="1">
14+
<mxGeometry x="540" y="100" width="380" height="460" as="geometry"/>
15+
</mxCell>
16+
<mxCell id="4" value="key states" style="rounded=0;whiteSpace=wrap;html=1;sketch=1;hachureGap=4;jiggle=2;curveFitting=1;fontFamily=Comic Sans MS;fontSize=20;" parent="1" vertex="1">
17+
<mxGeometry x="110" y="450" width="280" height="60" as="geometry"/>
18+
</mxCell>
19+
<mxCell id="35" value="" style="edgeStyle=none;sketch=1;hachureGap=4;jiggle=2;curveFitting=1;html=1;fontFamily=Comic Sans MS;fontSize=16;" parent="1" source="7" target="34" edge="1">
20+
<mxGeometry relative="1" as="geometry"/>
21+
</mxCell>
22+
<mxCell id="7" value="matrix scan" style="rounded=0;whiteSpace=wrap;html=1;sketch=1;hachureGap=4;jiggle=2;curveFitting=1;fontFamily=Comic Sans MS;fontSize=20;" parent="1" vertex="1">
23+
<mxGeometry x="670" y="160" width="120" height="60" as="geometry"/>
24+
</mxCell>
25+
<mxCell id="56" style="edgeStyle=none;sketch=1;hachureGap=4;jiggle=2;curveFitting=1;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.207;entryY=-0.033;entryDx=0;entryDy=0;entryPerimeter=0;fontFamily=Comic Sans MS;fontSize=16;" edge="1" parent="1" source="27" target="4">
26+
<mxGeometry relative="1" as="geometry"/>
27+
</mxCell>
28+
<mxCell id="27" value="scan master" style="rounded=0;whiteSpace=wrap;html=1;sketch=1;hachureGap=4;jiggle=2;curveFitting=1;fontFamily=Comic Sans MS;fontSize=20;" parent="1" vertex="1">
29+
<mxGeometry x="110" y="215" width="120" height="60" as="geometry"/>
30+
</mxCell>
31+
<mxCell id="37" value="" style="edgeStyle=none;sketch=1;hachureGap=4;jiggle=2;curveFitting=1;html=1;fontFamily=Comic Sans MS;fontSize=16;" parent="1" source="34" target="36" edge="1">
32+
<mxGeometry relative="1" as="geometry"/>
33+
</mxCell>
34+
<mxCell id="57" style="edgeStyle=none;sketch=1;hachureGap=4;jiggle=2;curveFitting=1;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;fontFamily=Comic Sans MS;fontSize=16;" edge="1" parent="1" source="40" target="43">
35+
<mxGeometry relative="1" as="geometry"/>
36+
</mxCell>
37+
<mxCell id="40" value="" style="rounded=0;whiteSpace=wrap;html=1;sketch=1;hachureGap=4;jiggle=2;curveFitting=1;fontFamily=Comic Sans MS;fontSize=20;" parent="1" vertex="1">
38+
<mxGeometry x="260" y="155" width="140" height="150" as="geometry"/>
39+
</mxCell>
40+
<mxCell id="34" value="find key change" style="rounded=0;whiteSpace=wrap;html=1;sketch=1;hachureGap=4;jiggle=2;curveFitting=1;fontFamily=Comic Sans MS;fontSize=20;" parent="1" vertex="1">
41+
<mxGeometry x="670" y="290" width="120" height="60" as="geometry"/>
42+
</mxCell>
43+
<mxCell id="39" style="sketch=1;hachureGap=4;jiggle=2;curveFitting=1;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;fontFamily=Comic Sans MS;fontSize=16;" parent="1" source="36" target="23" edge="1">
44+
<mxGeometry relative="1" as="geometry"/>
45+
</mxCell>
46+
<mxCell id="36" value="send to master" style="rounded=0;whiteSpace=wrap;html=1;sketch=1;hachureGap=4;jiggle=2;curveFitting=1;fontFamily=Comic Sans MS;fontSize=20;" parent="1" vertex="1">
47+
<mxGeometry x="670" y="410" width="120" height="60" as="geometry"/>
48+
</mxCell>
49+
<mxCell id="23" value="receive key change" style="rounded=0;whiteSpace=wrap;html=1;sketch=1;hachureGap=4;jiggle=2;curveFitting=1;fontFamily=Comic Sans MS;fontSize=20;" parent="1" vertex="1">
50+
<mxGeometry x="270" y="215" width="120" height="60" as="geometry"/>
51+
</mxCell>
52+
<mxCell id="41" value="slave caches" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;sketch=1;hachureGap=4;jiggle=2;curveFitting=1;fontFamily=Comic Sans MS;fontSize=20;" parent="1" vertex="1">
53+
<mxGeometry x="270" y="165" width="120" height="30" as="geometry"/>
54+
</mxCell>
55+
<mxCell id="51" style="edgeStyle=none;sketch=1;hachureGap=4;jiggle=2;curveFitting=1;html=1;exitX=0.75;exitY=0;exitDx=0;exitDy=0;entryX=0.75;entryY=0;entryDx=0;entryDy=0;fontFamily=Comic Sans MS;fontSize=16;" edge="1" parent="1" source="43" target="43">
56+
<mxGeometry relative="1" as="geometry"/>
57+
</mxCell>
58+
<mxCell id="58" style="edgeStyle=none;sketch=1;hachureGap=4;jiggle=2;curveFitting=1;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.786;entryY=0.017;entryDx=0;entryDy=0;entryPerimeter=0;fontFamily=Comic Sans MS;fontSize=16;" edge="1" parent="1" source="43" target="4">
59+
<mxGeometry relative="1" as="geometry"/>
60+
</mxCell>
61+
<mxCell id="43" value="sync slave" style="rounded=0;whiteSpace=wrap;html=1;sketch=1;hachureGap=4;jiggle=2;curveFitting=1;fontFamily=Comic Sans MS;fontSize=20;" vertex="1" parent="1">
62+
<mxGeometry x="270" y="350" width="120" height="60" as="geometry"/>
63+
</mxCell>
64+
<mxCell id="49" value="slave" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;sketch=1;hachureGap=4;jiggle=2;curveFitting=1;fontFamily=Comic Sans MS;fontSize=20;" vertex="1" parent="1">
65+
<mxGeometry x="550" y="110" width="60" height="30" as="geometry"/>
66+
</mxCell>
67+
<mxCell id="50" value="master" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;sketch=1;hachureGap=4;jiggle=2;curveFitting=1;fontFamily=Comic Sans MS;fontSize=20;" vertex="1" parent="1">
68+
<mxGeometry x="80" y="110" width="60" height="30" as="geometry"/>
69+
</mxCell>
70+
</root>
71+
</mxGraphModel>
72+
</diagram>
73+
</mxfile>

docs/src/split_keyboard.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# Split keyboard
22

33
<div class="warning">
4-
This feature is currently not implemented, this document is a design writeup
4+
This feature is currently not implemented, this document is a draft writeup
55
</div>
66

77
## Design
@@ -105,16 +105,16 @@ The slave continously scans it's matrix, if there's a key change, or a key press
105105

106106
In master, there's a key state cache for each slave, and a separate thread running to continously receives the key states from slave and saves key states to cache.
107107

108+
Each slave cache in master runs in different threads, which is an infinite loop that receives all `SplitMessage` from actual slave boards.
109+
108110
For master, the matrix scanning has the following steps:
109111

110112
1. Scan the master's own key matrix
111113
2. Read the all slaves' key state caches
112-
3. Merge them to a final key states, finish matrix scanning
113-
114-
Only the changed event should be sent, then the state cache of slave is updated. If the slave state is different from main key state, `changed` is true.
115-
114+
3. Merge them to a final key states, finish matrix scanning. If the slave state is different from main key state, `changed` is true.
116115
4. If the keyboard is running in `async_matrix` mode, each received key states triggers matrix scanning.
117116

117+
118118
### Implementation difference?
119119

120120
- single keyboard <-> split master:
@@ -151,7 +151,7 @@ There are several types of split keyboard that RMK should support:
151151

152152
The following is a simple table for those four types of split keyboard
153153

154-
| left/right connection | wired | wireless |
155-
| ----------- | ----------- | ------------ |
156-
| USB to host | fully wired | dongle like |
157-
| BLE to host | partial wireless| fully wireless|
154+
| left/right connection | wired | wireless |
155+
| --------------------- | ---------------- | -------------- |
156+
| USB to host | fully wired | dongle like |
157+
| BLE to host | partial wireless | fully wireless |

0 commit comments

Comments
 (0)