🔥 Redpowder
SDK oficial para desenvolvimento no Redstone OS
📖 O que é?
Redpowder é o kit de desenvolvimento para criar aplicações que rodam no Redstone OS. Ele fornece uma API de alto nível, type-safe e no_std para interagir com o kernel Forge.
✨ Features
| Feature | Descrição |
|---|---|
| 🔧 Syscalls | 50+ wrappers seguros para chamadas ao kernel |
| 📂 Filesystem | Abstração completa de arquivos e diretórios |
| 📝 Console | Macros print! e println! |
| 🧠 Memory | Alocação de memória virtual |
| 📨 IPC | Comunicação entre processos via portas |
| ⏱️ Time | Funções de tempo e sleep |
| 🎨 Graphics | Acesso ao framebuffer |
| 🖱️ Input | Mouse e teclado |
| 🪟 Window | Sistema de janelas (futuro) |
📦 Instalação
[]
= { = "../redpowder" }
Ou clone como subcrate no seu projeto Redstone.
🚀 Uso Rápido
use *;
use ;
pub extern "C" !
📚 Módulos
📂 fs - Sistema de Arquivos
O módulo de filesystem fornece abstrações de alto nível para arquivos e diretórios.
use ;
// === ARQUIVOS ===
// Abrir para leitura
let file = open?;
// Criar/truncar para escrita
let file = create?;
// Ler dados
let mut buf = ;
let bytes = file.read?;
// Escrever dados
file.write?;
// Seek
file.seek?;
// Stat
let info = file.stat?;
println!;
// === DIRETÓRIOS ===
// Listar diretório
for entry in open?.entries
// === OPERAÇÕES ===
// Verificar existência
if exists
// Verificar tipo
if is_dir
// Diretório de trabalho
let mut cwd_buf = ;
let cwd = getcwd?;
println!;
// Mudar diretório
chdir?;
Tipos do Módulo fs
| Tipo | Descrição |
|---|---|
File |
Handle de arquivo aberto |
Dir |
Handle de diretório aberto |
ReadDir |
Iterator sobre entradas de diretório |
DirEntry |
Entrada de diretório (nome, tipo) |
FileStat |
Metadados de arquivo (tamanho, tipo, times) |
OpenFlags |
Flags de abertura (O_RDONLY, O_CREATE, etc) |
SeekFrom |
Origem para seek (Start, Current, End) |
FileType |
Tipo de arquivo (Regular, Directory, Symlink) |
Funções do Módulo fs
| Função | Descrição |
|---|---|
stat(path) |
Obtém metadados de arquivo |
exists(path) |
Verifica se path existe |
is_file(path) |
Verifica se é arquivo regular |
is_dir(path) |
Verifica se é diretório |
getcwd(buf) |
Obtém diretório atual |
chdir(path) |
Muda diretório atual |
mkdir(path, mode) |
Cria diretório |
rmdir(path) |
Remove diretório vazio |
unlink(path) |
Remove arquivo |
rename(old, new) |
Renomeia/move arquivo |
🖥️ console - Saída de Console
use ;
print!;
println!;
println!;
// Controle do sistema
reboot; // Reinicia
poweroff; // Desliga
🧠 mem - Memória
use ;
let ptr = alloc?; // Aloca 4KB
free?; // Libera
📨 ipc - Comunicação Entre Processos
use ;
let port = create?; // Cria porta
port.send?; // Envia
let n = port.recv?; // Recebe
⏱️ time - Tempo
use ;
sleep; // Dorme 1000ms
let ticks = clock; // Ticks desde boot
🎨 graphics - Framebuffer
use ;
let fb = get?;
let info = fb.info;
println!;
fb.clear?;
fb.pixel?;
🖱️ input - Mouse e Teclado
use ;
if let Some = poll_mouse
if let Some = poll_keyboard
🔧 syscall - Acesso Direto
Para casos onde você precisa de acesso direto às syscalls:
use *;
// Syscalls raw
let ret = syscall3;
let result = check_error?;
🎯 Prelude
Para importar os tipos e funções mais comuns:
use *;
Inclui:
File,Dir,DirEntry,FileStat,OpenFlagsstat,exists,is_file,is_dir,getcwd,chdirprint!,println!exit,getpid,yield_nowsleepHandle,HandleRightsColor,FramebufferSysError,SysResult
⚙️ Requisitos
- Rust nightly (inline asm)
- Target:
x86_64-redstoneou target personalizado - Flags:
#![no_std],#![no_main]
📜 Syscalls Suportadas
O SDK expõe todas as syscalls do kernel Forge:
| Range | Categoria | Quantidade |
|---|---|---|
| 0x01-0x0F | Processo | 9 |
| 0x10-0x1F | Memória | 5 |
| 0x20-0x2F | Handles | 3 |
| 0x30-0x3F | IPC | 8 |
| 0x40-0x4F | Gráficos/Input | 5 |
| 0x50-0x5F | Tempo | 4 |
| 0x60-0x7F | Filesystem | 32 |
| 0x80-0x8F | Events | 1 |
| 0xF0-0xFF | Sistema | 6 |
📁 Estrutura do Projeto
redpowder/
├── src/
│ ├── lib.rs # Módulo principal
│ ├── syscall/ # Syscalls raw
│ │ ├── numbers.rs # Números de syscall
│ │ ├── raw.rs # Invocação inline asm
│ │ └── error.rs # SysError, SysResult
│ ├── fs/ # Filesystem
│ │ ├── types.rs # OpenFlags, FileStat, etc
│ │ ├── file.rs # Abstração File
│ │ ├── dir.rs # Abstração Dir, ReadDir
│ │ ├── ops.rs # stat, exists, chdir, etc
│ │ └── path.rs # Utilitários de path
│ ├── console/ # print!, println!
│ ├── mem/ # Alocação de memória
│ ├── ipc/ # Portas e mensagens
│ ├── time/ # Sleep e clock
│ ├── graphics/ # Framebuffer
│ ├── input/ # Mouse e teclado
│ └── ...
├── Cargo.toml
└── README.md
📄 Licença
MIT - Veja LICENSE