Skip to content

Commit f238a4d

Browse files
Merge pull request #184 from rommapp/poc/miyoo-minui-input
feat: universal MinUI distribution
2 parents 7104be0 + 1dd687c commit f238a4d

8 files changed

Lines changed: 105 additions & 58 deletions

File tree

.github/workflows/release.yml

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ jobs:
9090
GROUT_VERSION: ${{ needs.prepare.outputs.version }}
9191

9292
- name: Package ARM64 platforms
93-
run: task package:next package:muos package:knulli package:rocknix package:trimui package:minui package:batocera
93+
run: task package:next package:muos package:knulli package:rocknix package:trimui package:batocera
9494

9595
- name: Create distributions
9696
run: |
@@ -99,7 +99,6 @@ jobs:
9999
cd dist/Knulli && zip -r ../Grout-Knulli.zip Grout && cd ../..
100100
cd dist/ROCKNIX && zip -r ../Grout-ROCKNIX.zip Grout.sh Grout && cd ../..
101101
cd dist/Trimui && zip -r ../Grout-Trimui.zip Grout && cd ../..
102-
cd dist/MinUI-arm64 && zip -r ../Grout-MinUI-arm64.zip Grout && cd ../..
103102
cd dist/Batocera-arm64 && zip -r ../Grout-Batocera-arm64.zip Grout.sh Grout && cd ../..
104103
105104
- name: Upload artifacts
@@ -112,7 +111,6 @@ jobs:
112111
dist/Grout-Knulli.zip
113112
dist/Grout-ROCKNIX.zip
114113
dist/Grout-Trimui.zip
115-
dist/Grout-MinUI-arm64.zip
116114
dist/Grout-Batocera-arm64.zip
117115
build64/grout
118116
build64/lib/**
@@ -218,13 +216,12 @@ jobs:
218216
GROUT_VERSION: ${{ needs.prepare.outputs.version }}
219217

220218
- name: Package ARM32 platforms
221-
run: task package:allium package:onion package:minui-arm32
219+
run: task package:allium package:onion
222220

223221
- name: Create distributions
224222
run: |
225223
cd dist/Allium && zip -r ../Grout-Allium.zip Grout.pak && cd ../..
226224
cd dist/Onion && zip -r ../Grout-Onion.zip Grout && cd ../..
227-
cd dist/MinUI-arm32 && zip -r ../Grout-MinUI-arm32.zip Grout && cd ../..
228225
229226
- name: Upload artifacts
230227
uses: actions/upload-artifact@v4
@@ -233,7 +230,6 @@ jobs:
233230
path: |
234231
dist/Grout-Allium.zip
235232
dist/Grout-Onion.zip
236-
dist/Grout-MinUI-arm32.zip
237233
build32/grout
238234
package-arm-universal:
239235
needs: [prepare, build-arm64, build-arm32]
@@ -256,18 +252,20 @@ jobs:
256252
merge-multiple: true
257253

258254
- name: Package universal assets
259-
run: task package:spruce
255+
run: task package:spruce package:minui
260256

261257
- name: Create distributions
262258
run: |
263259
cd dist/Spruce && zip -r Grout.spruce.zip Grout && mv Grout.spruce.zip ../Grout.spruce.zip && cd ../..
260+
cd dist/MinUI && zip -r ../Grout-MinUI.zip Grout && cd ../..
264261
265262
- name: Upload artifacts
266263
uses: actions/upload-artifact@v4
267264
with:
268265
name: arm-universal-artifacts
269266
path: |
270267
dist/Grout.spruce.zip
268+
dist/Grout-MinUI.zip
271269
272270
release:
273271
needs: [prepare, build-arm64, build-amd64, build-x86, build-arm32, package-arm-universal]
@@ -298,8 +296,7 @@ jobs:
298296
**/Grout-Knulli.zip
299297
**/Grout-ROCKNIX.zip
300298
**/Grout-Trimui.zip
301-
**/Grout-MinUI-arm64.zip
302-
**/Grout-MinUI-arm32.zip
299+
**/Grout-MinUI.zip
303300
**/Grout-Batocera-arm64.zip
304301
**/Grout-Batocera-x86.zip
305302
**/Grout-Batocera-amd64.zip
@@ -375,8 +372,7 @@ jobs:
375372
"Grout-Trimui.zip"
376373
"Grout-Allium.zip"
377374
"Grout-Onion.zip"
378-
"Grout-MinUI-arm64.zip"
379-
"Grout-MinUI-arm32.zip"
375+
"Grout-MinUI.zip"
380376
"Grout-Batocera-arm64.zip"
381377
"Grout-Batocera-amd64.zip"
382378
"Grout-Batocera-x86.zip"

app/setup.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,9 +84,7 @@ func setupInputMapping(currentCFW cfw.CFW) {
8484
case cfw.Onion:
8585
mappingBytes, mappingErr = onion.GetInputMappingBytes()
8686
case cfw.MinUI:
87-
if environment.IsMiyoo() {
88-
mappingBytes, mappingErr = minui.GetInputMappingBytes()
89-
}
87+
mappingBytes, mappingErr = minui.GetInputMappingBytes()
9088
case cfw.Spruce:
9189
mappingBytes, mappingErr = spruce.GetInputMappingBytes()
9290
}

cfw/minui/input_mappings.go

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package minui
2+
3+
import (
4+
"embed"
5+
"fmt"
6+
"os"
7+
"path/filepath"
8+
"runtime"
9+
10+
gaba "github.com/BrandonKowalski/gabagool/v2/pkg/gabagool"
11+
)
12+
13+
//go:embed input_mappings/*.json
14+
var embeddedInputMappings embed.FS
15+
16+
// GetInputMappingBytes returns the embedded input mapping JSON for the current device.
17+
// Only arm32 Miyoo devices need custom keyboard mappings. All arm64 devices
18+
// (TrimUI, Miyoo Flip, MagicX, GKD Pixel, etc.) use standard SDL controller input.
19+
func GetInputMappingBytes() ([]byte, error) {
20+
logger := gaba.GetLogger()
21+
logger.Debug("Detecting MinUI device type", "arch", runtime.GOARCH)
22+
23+
if runtime.GOARCH != "arm" {
24+
// arm64 devices use standard SDL controller input
25+
return nil, nil
26+
}
27+
28+
// arm32 = Miyoo Mini / Mini Plus / A30 — needs custom keyboard mapping
29+
filename := "input_mappings/miyoo.json"
30+
31+
overridePath := filepath.Join("overrides", "cfw", "minui", filename)
32+
data, err := os.ReadFile(overridePath)
33+
if err != nil {
34+
data, err = embeddedInputMappings.ReadFile(filename)
35+
if err != nil {
36+
return nil, fmt.Errorf("failed to read embedded input mapping %s: %w", filename, err)
37+
}
38+
}
39+
40+
return data, nil
41+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
{
2+
"keyboard_map": {},
3+
"controller_button_map": {},
4+
"controller_hat_map": {},
5+
"joystick_axis_map": {},
6+
"joystick_button_map": {
7+
"10": 13,
8+
"11": 15,
9+
"12": 10,
10+
"13": 12,
11+
"3": 5,
12+
"4": 6,
13+
"5": 8,
14+
"6": 7,
15+
"7": 9,
16+
"8": 11,
17+
"9": 14
18+
},
19+
"joystick_hat_map": {
20+
"1": 1,
21+
"2": 4,
22+
"4": 2,
23+
"8": 3
24+
}
25+
}

cfw/minui/minui.go

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package minui
22

33
import (
44
"embed"
5-
"fmt"
65
"grout/internal/jsonutil"
76
"os"
87
"path/filepath"
@@ -11,9 +10,6 @@ import (
1110
//go:embed data/*.json
1211
var embeddedFiles embed.FS
1312

14-
//go:embed input_mappings/*.json
15-
var embeddedInputMappings embed.FS
16-
1713
var (
1814
Platforms = jsonutil.MustLoadJSONMap[string, []string](embeddedFiles, "data/platforms.json")
1915
SaveDirectories = jsonutil.MustLoadJSONMap[string, []string](embeddedFiles, "data/save_directories.json")
@@ -66,18 +62,3 @@ func RomFolderBase(path string, tagParser func(string) string) string {
6662
return path
6763
}
6864

69-
// GetInputMappingBytes returns the embedded input mapping JSON for Onion (Miyoo Mini/Mini+)
70-
func GetInputMappingBytes() ([]byte, error) {
71-
filename := "input_mappings/miyoo.json"
72-
73-
overridePath := filepath.Join("overrides", "cfw", "onion", filename)
74-
data, err := os.ReadFile(overridePath)
75-
if err != nil {
76-
data, err = embeddedInputMappings.ReadFile(filename)
77-
if err != nil {
78-
return nil, fmt.Errorf("failed to read embedded input mapping %s: %w", filename, err)
79-
}
80-
}
81-
82-
return data, nil
83-
}

scripts/MinUI/launch.sh

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,24 @@ if [ -d "../.update" ]; then
99
fi
1010

1111
export CFW=MinUI
12-
export LD_LIBRARY_PATH=$CUR_DIR/lib:$LD_LIBRARY_PATH
1312

14-
./grout
13+
ARCH=$(uname -m)
14+
case "$ARCH" in
15+
aarch64|arm64)
16+
export LD_LIBRARY_PATH=$CUR_DIR/lib64:$LD_LIBRARY_PATH
17+
./grout64
18+
;;
19+
armv7*|armhf)
20+
export IS_MIYOO=1
21+
export SDL_VIDEODRIVER=mmiyoo
22+
export SDL_AUDIODRIVER=mmiyoo
23+
export EGL_VIDEODRIVER=mmiyoo
24+
export SDL_MMIYOO_DOUBLE_BUFFER=1
25+
export LD_LIBRARY_PATH=$CUR_DIR/lib32:$LD_LIBRARY_PATH
26+
./grout32
27+
;;
28+
*)
29+
echo "Unsupported architecture: $ARCH"
30+
exit 1
31+
;;
32+
esac

taskfiles/package.yml

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ tasks:
44

55
all:
66
desc: Package for all platforms
7-
deps: [ next, muos, knulli, spruce, rocknix, trimui, allium, onion, minui, minui-arm32, batocera, batocera-x86, batocera-amd64 ]
7+
deps: [ next, muos, knulli, spruce, rocknix, trimui, allium, onion, minui, batocera, batocera-x86, batocera-amd64 ]
88
cmds:
99
- echo "Packaging complete (13 platforms)"
1010
silent: true
@@ -94,20 +94,15 @@ tasks:
9494

9595
minui:
9696
cmds:
97-
- rm -rf dist/MinUI-arm64
98-
- mkdir -p dist/MinUI-arm64/Grout/lib
99-
- cp build64/grout scripts/MinUI/launch.sh README.md LICENSE dist/MinUI-arm64/Grout
100-
- cp -R build64/lib/* dist/MinUI-arm64/Grout/lib/
101-
- chmod a+x dist/MinUI-arm64/Grout/grout dist/MinUI-arm64/Grout/launch.sh
102-
silent: true
103-
104-
minui-arm32:
105-
cmds:
106-
- rm -rf dist/MinUI-arm32
107-
- mkdir -p dist/MinUI-arm32/Grout/lib
108-
- cp build32/grout scripts/MinUI/launch.sh README.md LICENSE dist/MinUI-arm32/Grout
109-
- cp -R vendored/miyoo/* dist/MinUI-arm32/Grout/lib/
110-
- chmod a+x dist/MinUI-arm32/Grout/grout dist/MinUI-arm32/Grout/launch.sh
97+
- rm -rf dist/MinUI
98+
- mkdir -p dist/MinUI/Grout/lib64
99+
- mkdir -p dist/MinUI/Grout/lib32
100+
- cp build64/grout dist/MinUI/Grout/grout64
101+
- cp build32/grout dist/MinUI/Grout/grout32
102+
- cp scripts/MinUI/launch.sh README.md LICENSE dist/MinUI/Grout
103+
- cp -R build64/lib/* dist/MinUI/Grout/lib64/
104+
- cp -R vendored/miyoo/* dist/MinUI/Grout/lib32/
105+
- chmod a+x dist/MinUI/Grout/grout64 dist/MinUI/Grout/grout32 dist/MinUI/Grout/launch.sh
111106
silent: true
112107

113108
batocera:

update/updater.go

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -50,14 +50,7 @@ func GetDistributionAssetName(c cfw.CFW) string {
5050
case cfw.Onion:
5151
return "Grout-Onion.zip"
5252
case cfw.MinUI:
53-
switch runtime.GOARCH {
54-
case "arm64":
55-
return "Grout-MinUI-arm64.zip"
56-
case "arm":
57-
return "Grout-MinUI-arm32.zip"
58-
default:
59-
return ""
60-
}
53+
return "Grout-MinUI.zip"
6154
case cfw.Batocera:
6255
switch runtime.GOARCH {
6356
case "arm64":

0 commit comments

Comments
 (0)