151 lines
3.2 KiB
Markdown
151 lines
3.2 KiB
Markdown
# Menu Interativo com Navegação por Joystick - R36 Ultra
|
|
|
|
## ✅ Compilado com Sucesso para ARM64!
|
|
|
|
Sistema de menu interativo com suporte a navegação por joystick/gamepad para R36 Ultra.
|
|
|
|
## 📦 Arquivos
|
|
|
|
- **`menu_demo.c`** - Código fonte do menu interativo
|
|
- **`menu_demo`** - Binário ARM64 (755KB, estaticamente linkado)
|
|
- **`compile_menu.sh`** - Script de compilação
|
|
|
|
## 🎮 Características
|
|
|
|
### Interface
|
|
- ✅ 5 botões navegáveis
|
|
- ✅ Destaque visual do botão selecionado
|
|
- ✅ Bordas coloridas (amarelo quando selecionado)
|
|
- ✅ Fundo escuro com texto claro
|
|
- ✅ Título "MENU PRINCIPAL"
|
|
- ✅ Instruções na parte inferior
|
|
|
|
### Controles Suportados
|
|
- **D-Pad Cima/Baixo** - Navegar entre botões
|
|
- **Botão A / Enter** - Selecionar opção
|
|
- **ESC** - Sair
|
|
- **Ctrl+C** - Forçar saída
|
|
|
|
### Opções do Menu
|
|
1. **INICIAR JOGO**
|
|
2. **CONFIGURACOES**
|
|
3. **CARREGAR SAVE**
|
|
4. **CREDITOS**
|
|
5. **SAIR** (encerra o programa)
|
|
|
|
## 🚀 Como Usar
|
|
|
|
### Transferir para R36 Ultra
|
|
|
|
**Via SCP:**
|
|
```bash
|
|
scp menu_demo user@r36ultra:/home/user/
|
|
```
|
|
|
|
**Via USB/SD Card:**
|
|
1. Copie `menu_demo` para USB/SD
|
|
2. Insira no R36 Ultra
|
|
3. Copie para o dispositivo
|
|
|
|
### Executar no R36 Ultra
|
|
|
|
```bash
|
|
chmod +x menu_demo
|
|
sudo ./menu_demo
|
|
```
|
|
|
|
## 🎨 Cores e Visual
|
|
|
|
- **Botão Normal**: Fundo cinza escuro (80,80,80) com borda clara
|
|
- **Botão Selecionado**: Fundo azul (50,100,200) com borda amarela (255,200,0)
|
|
- **Texto**: Branco (255,255,255)
|
|
- **Fundo**: Cinza escuro (30,30,30)
|
|
|
|
## 🔧 Recompilar
|
|
|
|
### Para ARM64 (cross-compile):
|
|
```bash
|
|
./compile_menu.sh arm64
|
|
```
|
|
|
|
### Para nativo (x86_64):
|
|
```bash
|
|
./compile_menu.sh
|
|
```
|
|
|
|
## 📝 Personalização
|
|
|
|
### Adicionar Novos Botões
|
|
|
|
Edite a função `main()` em `menu_demo.c`:
|
|
|
|
```c
|
|
menu_add_button(&menu, "NOVO BOTAO");
|
|
```
|
|
|
|
### Alterar Cores
|
|
|
|
Edite a função `draw_button()`:
|
|
|
|
```c
|
|
// Botão selecionado (B, G, R, A)
|
|
draw_rectangle(fb, btn->x, btn->y, btn->width, btn->height, 200, 100, 50, 255);
|
|
```
|
|
|
|
### Alterar Tamanho dos Botões
|
|
|
|
No topo do arquivo:
|
|
|
|
```c
|
|
#define BUTTON_HEIGHT 60
|
|
#define BUTTON_WIDTH 500
|
|
#define BUTTON_MARGIN 10
|
|
```
|
|
|
|
## 🎯 Detecção de Entrada
|
|
|
|
O programa tenta abrir automaticamente os seguintes dispositivos:
|
|
- `/dev/input/event0`
|
|
- `/dev/input/event1`
|
|
- `/dev/input/event2`
|
|
- `/dev/input/event3`
|
|
- `/dev/input/js0`
|
|
|
|
Se nenhum dispositivo for encontrado, o programa ainda funciona mas você precisará usar SSH ou terminal para enviar comandos.
|
|
|
|
## 🔍 Debugging
|
|
|
|
Para ver qual dispositivo de entrada foi aberto:
|
|
```bash
|
|
sudo ./menu_demo
|
|
# Saída: "Opened input device: /dev/input/eventX"
|
|
```
|
|
|
|
Para listar dispositivos de entrada disponíveis:
|
|
```bash
|
|
ls -la /dev/input/
|
|
```
|
|
|
|
## 💡 Próximos Passos
|
|
|
|
Para adicionar funcionalidade aos botões, edite o switch case em `main()`:
|
|
|
|
```c
|
|
case BTN_SOUTH: // A button
|
|
case KEY_ENTER:
|
|
printf("Activated: %s\n", menu.buttons[menu.selected].text);
|
|
if (menu.selected == 0) { // INICIAR JOGO
|
|
// Adicione sua lógica aqui
|
|
}
|
|
break;
|
|
```
|
|
|
|
## 📊 Informações Técnicas
|
|
|
|
- **Resolução**: 720x720 pixels
|
|
- **Formato**: BGRA (4 bytes por pixel)
|
|
- **Framebuffer**: `/dev/fb0`
|
|
- **Arquitetura**: ARM64 (aarch64)
|
|
- **Linkagem**: Estática (sem dependências)
|
|
- **Tamanho**: 755KB
|