redpowder 0.2.0

SDK / Devkit para Redstone OS
Documentation
  • Coverage
  • 46.79%
    270 out of 577 items documented19 out of 151 items with examples
  • Size
  • Source code size: 120.22 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 20.14 MB This is the summed size of all files generated by rustdoc for all configured targets
  • Ø build duration
  • this release: 16s Average build duration of successful builds.
  • all releases: 17s Average build duration of successful builds in releases after 2024-10-23.
  • Links
  • Redstone-OS/redpowder
    0 0 0
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • MikeLanDSBR

🔥 Redpowder

SDK oficial para desenvolvimento no Redstone OS

License: MIT Rust


📖 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

[dependencies]

redpowder = { path = "../redpowder" }

Ou clone como subcrate no seu projeto Redstone.


🚀 Uso Rápido

#![no_std]
#![no_main]

use redpowder::prelude::*;
use redpowder::fs::{File, Dir};

#[no_mangle]
pub extern "C" fn _start() -> ! {
    println!("Hello from Redstone OS!");
    
    // Ler arquivo
    if let Ok(file) = File::open("/apps/config.txt") {
        let mut buf = [0u8; 256];
        if let Ok(bytes) = file.read(&mut buf) {
            println!("Lido {} bytes", bytes);
        }
    }
    
    // Listar diretório
    if let Ok(dir) = Dir::open("/apps") {
        for entry in dir.entries() {
            println!("  {}", entry.name());
        }
    }
    
    exit(0);
}

📚 Módulos

📂 fs - Sistema de Arquivos

O módulo de filesystem fornece abstrações de alto nível para arquivos e diretórios.

use redpowder::fs::{File, Dir, stat, exists, chdir, getcwd};

// === ARQUIVOS ===

// Abrir para leitura
let file = File::open("/apps/hello.txt")?;

// Criar/truncar para escrita
let file = File::create("/apps/output.txt")?;

// Ler dados
let mut buf = [0u8; 1024];
let bytes = file.read(&mut buf)?;

// Escrever dados
file.write(b"Hello World")?;

// Seek
file.seek(0, SeekFrom::Start)?;

// Stat
let info = file.stat()?;
println!("Tamanho: {} bytes", info.size);

// === DIRETÓRIOS ===

// Listar diretório
for entry in Dir::open("/apps")?.entries() {
    if entry.is_file() {
        println!("📄 {}", entry.name());
    } else {
        println!("📁 {}", entry.name());
    }
}

// === OPERAÇÕES ===

// Verificar existência
if exists("/apps/hello.txt") {
    println!("Arquivo existe!");
}

// Verificar tipo
if is_dir("/apps") {
    println!("É um diretório");
}

// Diretório de trabalho
let mut cwd_buf = [0u8; 256];
let cwd = getcwd(&mut cwd_buf)?;
println!("CWD: {}", cwd);

// Mudar diretório
chdir("/apps")?;

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 redpowder::console::{print, println, reboot, poweroff};

print!("Sem quebra de linha");
println!("Com quebra de linha");
println!("Formatado: {} + {} = {}", 1, 2, 3);

// Controle do sistema
reboot();     // Reinicia
poweroff();   // Desliga

🧠 mem - Memória

use redpowder::mem::{alloc, free, map};

let ptr = alloc(4096)?;  // Aloca 4KB
free(ptr, 4096)?;        // Libera

📨 ipc - Comunicação Entre Processos

use redpowder::ipc::{Port, create_port, send, recv};

let port = Port::create(32)?;        // Cria porta
port.send(b"mensagem")?;             // Envia
let n = port.recv(&mut buf, 0)?;     // Recebe

⏱️ time - Tempo

use redpowder::time::{sleep, clock};

sleep(1000);              // Dorme 1000ms
let ticks = clock();      // Ticks desde boot

🎨 graphics - Framebuffer

use redpowder::graphics::{Framebuffer, Color};

let fb = Framebuffer::get()?;
let info = fb.info();
println!("Resolução: {}x{}", info.width, info.height);

fb.clear(Color::BLACK)?;
fb.pixel(100, 100, Color::RED)?;

🖱️ input - Mouse e Teclado

use redpowder::input::{poll_mouse, poll_keyboard, KeyEvent};

if let Some(state) = poll_mouse() {
    println!("Mouse: ({}, {})", state.x, state.y);
}

if let Some(key) = poll_keyboard() {
    println!("Tecla: {:?}", key);
}

🔧 syscall - Acesso Direto

Para casos onde você precisa de acesso direto às syscalls:

use redpowder::syscall::*;

// Syscalls raw
let ret = syscall3(SYS_OPEN, ptr, len, flags);
let result = check_error(ret)?;

🎯 Prelude

Para importar os tipos e funções mais comuns:

use redpowder::prelude::*;

Inclui:

  • File, Dir, DirEntry, FileStat, OpenFlags
  • stat, exists, is_file, is_dir, getcwd, chdir
  • print!, println!
  • exit, getpid, yield_now
  • sleep
  • Handle, HandleRights
  • Color, Framebuffer
  • SysError, SysResult

⚙️ Requisitos

  • Rust nightly (inline asm)
  • Target: x86_64-redstone ou 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


🔗 Links