|
| 1 | +<!doctype html> |
| 2 | +<html lang="en"> |
| 3 | +<head> |
| 4 | + <meta charset="utf-8"> |
| 5 | + <meta name="viewport" content="width=device-width, initial-scale=1"> |
| 6 | + <!-- PYDEVICES-HEAD-TAGS: START --> |
| 7 | + <title>PyDevices - usbif</title> |
| 8 | + <meta name="description" content="A board a computer sees as a sound card, a MIDI instrument, a keyboard, a drive or a webcam — and, on the same board, a USB host that a keyboard, thumb drive, MIDI controller or camera plugs into. The third PyDevices *if module after displayif and audioif: a native C module with a thin, stable Python surface that runs unchanged on a workstation."> |
| 9 | + <link rel="icon" type="image/svg+xml" href="/assets/img/logo.svg"> |
| 10 | + <!-- PYDEVICES-HEAD-TAGS: END --> |
| 11 | + <link rel="stylesheet" href="/assets/chrome/site.css"> |
| 12 | +</head> |
| 13 | +<body> |
| 14 | + <!-- PYDEVICES-ABOVE-THE-FOLD: START --> |
| 15 | + <div id="pydevices-site-header"></div> |
| 16 | + |
| 17 | + <!-- Hero Banner --> |
| 18 | + <section class="hero wrap has-hero-canvas"> |
| 19 | + <div class="hero-main"> |
| 20 | + <div class="hero-lead"> |
| 21 | + <div class="logo-badge product-mark" style="background: linear-gradient(135deg, var(--tier-1-amber), var(--tier-1-deep)); color: var(--on-accent);"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 2L2 7l10 5 10-5-10-5z"/></svg></div> |
| 22 | + <span class="eyebrow" style="color: var(--tier-1-amber);">usbif</span> |
| 23 | + </div> |
| 24 | + <h1>usbif — native USB for MicroPython: device, host, and both at once.</h1> |
| 25 | + <p><code>usbif</code> A board a computer sees as a sound card, a MIDI instrument, a keyboard, a drive or a webcam — and, on the same board, a USB host that a keyboard, thumb drive, MIDI controller or camera plugs into. The third PyDevices *if module after displayif and audioif: a native C module with a thin, stable Python surface that runs unchanged on a workstation.</p> |
| 26 | + <div class="cta"> |
| 27 | + <a class="btn primary" style="background: var(--github-ink); color: var(--on-accent); border-color: var(--github-ink);" href="https://github.com/PyDevices/usbif"> |
| 28 | + <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.9a3.4 3.4 0 0 0-1-2.6c3-.3 6-1.5 6-6.5a5 5 0 0 0-1.4-3.5 4.6 4.6 0 0 0-.1-3.5s-1.1-.3-3.5 1.3a12 12 0 0 0-6 0C6.6 1.7 5.5 2 5.5 2a4.6 4.6 0 0 0-.1 3.5A5 5 0 0 0 4 9c0 5 3 6.2 6 6.5a3.4 3.4 0 0 0-1 2.6V22"/></svg> |
| 29 | + GitHub Repo |
| 30 | + </a> |
| 31 | + <a class="btn" style="border-color: var(--tier-1-amber); color: var(--tier-1-amber);" href="https://github.com/PyDevices/usbif/blob/main/lib/usbif/README.md">Portable API</a> |
| 32 | + <a class="btn" style="border-color: var(--tier-1-amber); color: var(--tier-1-amber);" href="https://github.com/PyDevices/usbif/tree/main/examples">Examples</a> |
| 33 | + <a class="btn" style="border-color: var(--tier-1-amber); color: var(--tier-1-amber);" href="https://pydevices.github.io/audioif/">audioif</a> |
| 34 | + <a class="btn" style="border-color: var(--tier-1-amber); color: var(--tier-1-amber);" href="https://pydevices.github.io/displayif/">displayif</a> |
| 35 | + </div> |
| 36 | + </div> |
| 37 | + <div class="hero-canvas-wrap" data-hero-canvas="hero_canvas" data-hero-app="encoder" data-hero-deps="pydevices,pydevices-lvgl" data-hero-app-url="https://PyDevices.github.io/assets/apps/encoder.py"> |
| 38 | + <div class="hero-canvas-square"> |
| 39 | + <div class="hero-canvas-loader"> |
| 40 | + <div class="hero-spinner"></div> |
| 41 | + <span class="hero-canvas-status">Live Pure-Python Device</span> |
| 42 | + </div> |
| 43 | + <canvas id="hero_canvas" width="480" height="480" tabindex="0"></canvas> |
| 44 | + </div> |
| 45 | + </div> |
| 46 | + </section> |
| 47 | + <!-- PYDEVICES-ABOVE-THE-FOLD: END --> |
| 48 | + <div id="pydevices-site-footer"></div> |
| 49 | + <script src="/assets/chrome/site-chrome.js"></script> |
| 50 | +</body> |
| 51 | +</html> |
0 commit comments