---
import '../../styles/global.css';
---
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<meta name="viewport" content="width=device-width" />
<meta name="generator" content={Astro.generator} />
<title>Constants API - PoKeys Core Library</title>
<style>
aside .sidebar-nav a {
display: block !important;
width: 100% !important;
}
aside .sidebar-nav {
display: flex !important;
flex-direction: column !important;
}
</style>
</head>
<body class="bg-gray-900 text-white">
<nav class="fixed top-0 left-0 right-0 z-50 bg-gray-900/80 backdrop-blur-md border-b border-gray-800 h-16">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 h-full">
<div class="flex justify-between items-center h-full">
<a href="/core/" class="text-2xl font-bold bg-gradient-to-r from-blue-400 to-purple-500 bg-clip-text text-transparent">
PoKeys
</a>
<div class="hidden md:flex space-x-8">
<a href="/core/" class="text-gray-300 hover:text-white transition-colors">Home</a>
<a href="/core/getting-started" class="text-gray-300 hover:text-white transition-colors">Getting Started</a>
<a href="/core/examples/" class="text-gray-300 hover:text-white transition-colors">Examples</a>
<a href="/core/api/" class="text-white font-semibold">API Reference</a>
</div>
</div>
</div>
</nav>
<div class="flex min-h-screen pt-16">
<aside class="w-80 bg-gray-800/50 border-r border-gray-700 overflow-y-auto flex-shrink-0">
<div class="p-6">
<a href="/core/api/" class="text-blue-400 hover:text-blue-300 mb-4 inline-block">← Back to API Reference</a>
<h2 class="text-xl font-bold mb-6 text-white">API Reference</h2>
<div class="mb-6">
<h3 class="text-sm font-semibold text-gray-400 uppercase tracking-wider mb-3">Core APIs</h3>
<div class="space-y-1 sidebar-nav">
<a href="/core/api/device" class="block px-3 py-2 text-gray-300 hover:text-white hover:bg-gray-700/50 rounded-md transition-colors">
Device Management
</a>
<a href="/core/api/connection" class="block px-3 py-2 text-gray-300 hover:text-white hover:bg-gray-700/50 rounded-md transition-colors">
Connection & Enumeration
</a>
<a href="/core/api/models" class="block px-3 py-2 text-gray-300 hover:text-white hover:bg-gray-700/50 rounded-md transition-colors">
Device Models
</a>
</div>
</div>
<div class="mb-6">
<h3 class="text-sm font-semibold text-gray-400 uppercase tracking-wider mb-3">I/O Operations</h3>
<div class="space-y-1 sidebar-nav">
<a href="/core/api/digital-io" class="block px-3 py-2 text-gray-300 hover:text-white hover:bg-gray-700/50 rounded-md transition-colors">
Digital I/O
</a>
<a href="/core/api/analog-io" class="block px-3 py-2 text-gray-300 hover:text-white hover:bg-gray-700/50 rounded-md transition-colors">
Analog I/O
</a>
<a href="/core/api/pin-functions" class="block px-3 py-2 text-gray-300 hover:text-white hover:bg-gray-700/50 rounded-md transition-colors">
Pin Functions
</a>
</div>
</div>
<div class="mb-6">
<h3 class="text-sm font-semibold text-gray-400 uppercase tracking-wider mb-3">Control Systems</h3>
<div class="space-y-1 sidebar-nav">
<a href="/core/api/pwm" class="block px-3 py-2 text-gray-300 hover:text-white hover:bg-gray-700/50 rounded-md transition-colors">
PWM Control
</a>
<a href="/core/api/encoders" class="block px-3 py-2 text-gray-300 hover:text-white hover:bg-gray-700/50 rounded-md transition-colors">
Encoders
</a>
<a href="/core/api/pulse-engine" class="block px-3 py-2 text-gray-300 hover:text-white hover:bg-gray-700/50 rounded-md transition-colors">
Pulse Engine v2
</a>
<a href="/core/api/servo-control" class="block px-3 py-2 text-gray-300 hover:text-white hover:bg-gray-700/50 rounded-md transition-colors">
Servo Control
</a>
</div>
</div>
<div class="mb-6">
<h3 class="text-sm font-semibold text-gray-400 uppercase tracking-wider mb-3">Communication</h3>
<div class="space-y-1 sidebar-nav">
<a href="/core/api/spi" class="block px-3 py-2 text-gray-300 hover:text-white hover:bg-gray-700/50 rounded-md transition-colors">
SPI Protocol
</a>
<a href="/core/api/i2c" class="block px-3 py-2 text-gray-300 hover:text-white hover:bg-gray-700/50 rounded-md transition-colors">
I2C Protocol
</a>
<a href="/core/api/uart" class="block px-3 py-2 text-gray-300 hover:text-white hover:bg-gray-700/50 rounded-md transition-colors">
UART Serial
</a>
<a href="/core/api/can" class="block px-3 py-2 text-gray-300 hover:text-white hover:bg-gray-700/50 rounded-md transition-colors">
CAN Bus
</a>
<a href="/core/api/onewire" class="block px-3 py-2 text-gray-300 hover:text-white hover:bg-gray-700/50 rounded-md transition-colors">
1-Wire Protocol
</a>
</div>
</div>
<div class="mb-6">
<h3 class="text-sm font-semibold text-gray-400 uppercase tracking-wider mb-3">Matrix Operations</h3>
<div class="space-y-1 sidebar-nav">
<a href="/core/api/matrix-keyboard" class="block px-3 py-2 text-gray-300 hover:text-white hover:bg-gray-700/50 rounded-md transition-colors">
Matrix Keyboard
</a>
<a href="/core/api/led-matrix" class="block px-3 py-2 text-gray-300 hover:text-white hover:bg-gray-700/50 rounded-md transition-colors">
LED Matrix
</a>
</div>
</div>
<div class="mb-6">
<h3 class="text-sm font-semibold text-gray-400 uppercase tracking-wider mb-3">Display & Sensors</h3>
<div class="space-y-1 sidebar-nav">
<a href="/core/api/lcd" class="block px-3 py-2 text-gray-300 hover:text-white hover:bg-gray-700/50 rounded-md transition-colors">
LCD Display
</a>
<a href="/core/api/sensors" class="block px-3 py-2 text-gray-300 hover:text-white hover:bg-gray-700/50 rounded-md transition-colors">
EasySensors
</a>
<a href="/core/api/rtc" class="block px-3 py-2 text-gray-300 hover:text-white hover:bg-gray-700/50 rounded-md transition-colors">
Real-Time Clock
</a>
</div>
</div>
<div class="mb-6">
<h3 class="text-sm font-semibold text-gray-400 uppercase tracking-wider mb-3">Error Handling</h3>
<div class="space-y-1 sidebar-nav">
<a href="/core/api/errors" class="block px-3 py-2 text-gray-300 hover:text-white hover:bg-gray-700/50 rounded-md transition-colors">
Error Types
</a>
<a href="/core/api/result-handling" class="block px-3 py-2 text-gray-300 hover:text-white hover:bg-gray-700/50 rounded-md transition-colors">
Result Handling
</a>
</div>
</div>
<div class="mb-6">
<h3 class="text-sm font-semibold text-gray-400 uppercase tracking-wider mb-3">Types & Utilities</h3>
<div class="space-y-1 sidebar-nav">
<a href="/core/api/types" class="block px-3 py-2 text-gray-300 hover:text-white hover:bg-gray-700/50 rounded-md transition-colors">
Core Types
</a>
<a href="/core/api/constants" class="block px-3 py-2 text-white bg-gray-700/50 rounded-md transition-colors">
Constants
</a>
</div>
</div>
</div>
</aside>
<main class="flex-1 p-8 min-h-screen">
<div class="max-w-4xl">
<div class="mb-12">
<div class="flex items-center gap-4 mb-6">
<span class="px-3 py-1 bg-gray-600/20 text-gray-300 text-sm rounded-full">Constants</span>
</div>
<h1 class="text-4xl font-bold mb-4 bg-gradient-to-r from-gray-400 to-slate-500 bg-clip-text text-transparent">
Constants API
</h1>
<p class="text-xl text-gray-400">
Important constants and predefined values used throughout the PoKeys Core Library
</p>
</div>
<section class="mb-12">
<h2 class="text-2xl font-bold mb-6 text-white">PWM Constants</h2>
<div class="bg-gray-800 rounded-lg p-6">
<div class="bg-gray-900 rounded p-4">
<pre class="text-gray-300"><code>// PWM Clock Frequency
pub const PWM_CLOCK_FREQUENCY: u32 = 25_000_000; // 25MHz
// Standard Servo Timing (in clock cycles)
pub const SERVO_PERIOD_20MS: u32 = 500_000; // 20ms period
pub const SERVO_1MS_PULSE: u32 = 25_000; // 1ms pulse
pub const SERVO_1_5MS_PULSE: u32 = 37_500; // 1.5ms pulse
pub const SERVO_2MS_PULSE: u32 = 50_000; // 2ms pulse
// PWM Channels
pub const PWM_CHANNEL_COUNT: usize = 6;
pub const PWM_MIN_PIN: u8 = 17;
pub const PWM_MAX_PIN: u8 = 22;</code></pre>
</div>
</div>
</section>
<section class="mb-12">
<h2 class="text-2xl font-bold mb-6 text-white">Device Constants</h2>
<div class="bg-gray-800 rounded-lg p-6">
<div class="bg-gray-900 rounded p-4">
<pre class="text-gray-300"><code>// Maximum pin counts per device
pub const MAX_PINS_POKEYS55: u8 = 55;
pub const MAX_PINS_POKEYS56: u8 = 55;
pub const MAX_PINS_POKEYS57: u8 = 57;
pub const MAX_PINS_POKEYS58: u8 = 58;
// SPI Pin Assignments
pub const SPI_MOSI_PIN: u8 = 23;
pub const SPI_MISO_PIN: u8 = 24;
pub const SPI_CLK_PIN: u8 = 25;
// ADC Resolution
pub const ADC_MAX_VALUE: u32 = 4095; // 12-bit ADC</code></pre>
</div>
</div>
</section>
<section class="mb-12">
<h2 class="text-2xl font-bold mb-6 text-white">Communication Constants</h2>
<div class="bg-gray-800 rounded-lg p-6">
<div class="bg-gray-900 rounded p-4">
<pre class="text-gray-300"><code>// I2C Constants
pub const I2C_MAX_PACKET_SIZE: usize = 32;
pub const I2C_DEFAULT_CLOCK_SPEED: u32 = 100_000; // 100kHz
pub const I2C_FAST_CLOCK_SPEED: u32 = 400_000; // 400kHz
// Network Discovery
pub const NETWORK_DISCOVERY_PORT: u16 = 20055;
pub const DEFAULT_NETWORK_TIMEOUT: u32 = 5000; // 5 seconds
// Matrix Keyboard
pub const MATRIX_MAX_WIDTH: u8 = 16;
pub const MATRIX_MAX_HEIGHT: u8 = 8;
pub const MATRIX_INTERNAL_COLUMNS: u8 = 8;</code></pre>
</div>
</div>
</section>
<section class="mb-12">
<h2 class="text-2xl font-bold mb-4 text-white">Usage Examples</h2>
<div class="bg-gray-800 rounded-lg p-6">
<div class="bg-gray-900 rounded p-4">
<pre class="text-gray-300"><code>use pokeys_lib::*;
// Using PWM constants for servo control
device.set_pwm_period(SERVO_PERIOD_20MS)?;
device.set_pwm_duty_cycle_for_pin(22, SERVO_1_5MS_PULSE)?; // Center position
// Using ADC constants for voltage conversion
let adc_value = device.get_analog_input(1)?;
let voltage = (adc_value as f32 / ADC_MAX_VALUE as f32) * 3.3;
// Using I2C constants for configuration
let i2c_config = I2cConfig {`{`}
clock_speed: I2C_FAST_CLOCK_SPEED,
timeout_ms: 1000,
enable_pullups: true,
{`}`};</code></pre>
</div>
</div>
</section>
</div>
</main>
</div>
</body>
</html>