Skip to content

Latest commit

 

History

History
218 lines (191 loc) · 9.86 KB

File metadata and controls

218 lines (191 loc) · 9.86 KB

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[0.3.0] - 2024-10-21

Added - 3D Visualization

  • Interactive 3D Viewer: Real-time G-code toolpath visualization using Three.js
  • Toolpath Preview: Automatic G-code parsing and 3D rendering of movement commands
  • Gradient Coloring: Visual indication of toolpath progression (blue to cyan)
  • Machine Position Indicator: Real-time orange sphere showing current machine position
  • Interactive Camera Controls: Orbit, zoom, and pan with mouse
  • View Modes: Quick access buttons for Top, Front, Side, and Isometric views
  • Coordinate Axes: Color-coded XYZ axes with labels (Red/Green/Blue)
  • Reference Grid: Ground plane grid for spatial reference
  • Bounds Display: Automatic calculation and display of workpiece dimensions
  • WebGL Acceleration: Hardware-accelerated 3D rendering at 60 FPS

Implementation Details - 3D Visualization

  • Created ui/src/viewer3d.js with GCodeViewer3D class (310 lines)
  • Integrated Three.js r128 and OrbitControls via CDN
  • Added 3D viewer container and controls to UI (400px height, responsive)
  • Automatic toolpath loading when G-code file is selected
  • Real-time position updates synchronized with status polling
  • Coordinate system transformation (G-code XYZ → Three.js)
  • Comprehensive documentation in docs/3D_VISUALIZATION.md

Technical Details - 3D Visualization

  • G-code Parsing: Extracts G0/G1 movement commands with X/Y/Z coordinates
  • Performance: Efficiently handles 10,000+ toolpath points
  • Memory Efficient: Line geometry for minimal memory footprint
  • Lighting: Ambient and directional lights for depth perception
  • Camera: Perspective camera with auto-centering on toolpath
  • Damping: Smooth, inertial camera movement
  • Window Resize: Responsive rendering with proper aspect ratio

Features - 3D Visualization

  • Parse G0/G00 (rapid) and G1/G01 (feed) commands
  • Support for comments and empty lines (ignored)
  • Automatic bounds calculation (min/max X/Y/Z)
  • Glow effect on machine position indicator
  • Semi-transparent UI controls overlay
  • Real-time info display (points, bounds)
  • Clean integration with existing UI theme

[0.2.0] - 2024-10-21

Added - Task 6: Enhanced UI

  • Progress Bars: Real-time visual progress tracking with percentage and line counters
  • File Validation: Pre-flight G-code file validation with error detection
  • Time Estimation: Estimated job duration calculation based on command count
  • Elapsed Time Tracking: Real-time elapsed time display during job execution
  • Job History: Comprehensive job history with status tracking, duration, and timestamps
  • History Management: Clear history functionality and persistent storage during session
  • File Info Display: Shows line count, estimated duration, and warnings before streaming
  • Streaming Controls: Integrated Start/Pause/Resume/Cancel buttons with proper state management
  • Status Badges: Color-coded job status indicators (Success/Failed/Cancelled)
  • Modern UI Design: Enhanced styling with progress animations and responsive layouts

Implementation Details - Task 6

  • Created src-tauri/src/main.rs with full Tauri backend (397 lines)
  • Added 9 new Tauri commands for enhanced functionality
  • Implemented 3 new data structures: JobProgress, JobHistoryEntry, FileValidationResult
  • Enhanced ui/index.html with 203 lines of new UI components and JavaScript
  • Added comprehensive CSS styling for progress bars, history, and file validation
  • Integrated with existing streaming and controller APIs
  • Added filesystem and dialog permissions to Tauri config

Technical Improvements - Task 6

  • Type-safe Rust backend with proper error handling
  • State management using Arc<Mutex<>> for thread-safety
  • Async/await patterns for all operations
  • 250ms polling intervals for smooth progress updates
  • Efficient UI updates with show/hide logic
  • Defensive programming with null checks and error messages

[0.1.0] - 2024-10-21

Added

  • Initial Rust port of Universal G-Code Sender
  • Core model types (Position, Axis, Units, Alarm)
  • Serial communication layer using tokio-serial
  • GRBL controller implementation
  • Basic Tauri GUI application
  • Connection management (connect/disconnect)
  • Machine status monitoring
  • Jogging controls (X/Y/Z axes)
  • Homing cycle support
  • G-code command sending
  • Alarm unlock functionality
  • Soft reset support
  • Real-time status updates
  • Console logging
  • Cross-platform support (Windows, macOS, Linux)
  • Command-line interface (CLI) for terminal use
  • Response handling system (Task 2)
  • Serial read loop with async buffering
  • GRBL response parsing and dispatching
  • Real-time state updates from controller
  • Event notification system

Fixed - Task 1 (2024-10-21)

  • SerialPort Send trait issue: Changed from Box to Arc<Mutex> for thread-safety
  • Async trait implementation: Properly implemented async/await with tokio::sync::Mutex throughout
  • Type mismatches: Fixed all Result types requiring .await
  • Connection error handling: Fixed ConnectionError::SerialPort error conversion
  • Status polling: Fixed tokio mutex lock issues in background tasks
  • Sync methods: Implemented proper try_lock patterns for methods requiring sync access
  • Unused imports: Cleaned up unused Connection, Position, and Arc imports
  • Variable warnings: Suppressed warnings for future-use methods

Implemented - Task 2 (2024-10-21)

  • Serial read loop: Async task for reading from serial port
  • Line buffering: Splits incoming data on newlines
  • Response dispatcher: GrblListenerHandle for parsing and routing
  • Status parsing: Real-time position updates from status messages
  • Alarm handling: Detect and propagate GRBL alarms
  • Event system: Notify application listeners of all events
  • Task management: Clean shutdown of read tasks
  • Integration tests: Added controller tests (19 tests total passing)

Implemented - Task 3 (2024-10-21)

  • G-code file loading: Load and parse files from disk
  • File streaming system: Complete streaming engine with flow control
  • Streaming state machine: Idle, Streaming, Paused, Complete, Error states
  • Automatic flow control: Wait for "ok" before sending next command
  • Progress tracking: Track and report current line / total lines
  • Pause/Resume/Cancel: Full control over streaming
  • Event notifications: FileStreamStarted, Progress, Complete events
  • Error handling: Graceful handling of command errors during streaming
  • 7 streaming tests: Comprehensive test suite (all passing)

Implemented - Task 4 (2025-10-20)

  • Mock connection: Complete fake serial port for testing
  • Response queue system: Configurable response sequences
  • Command history tracking: Verify all sent commands
  • Latency simulation: Test timing-dependent code
  • Response injection: Simulate incoming data at any time
  • TestListener helper: Collect and query controller events
  • 18 integration tests: Complete mock-based testing
  • 3 mock self-tests: Internal validation
  • 47 total tests passing: Comprehensive coverage (~90%)

Implemented - Task 5 (2025-10-20)

  • Status polling lifecycle: Proper start/stop with connection
  • Polling task management: JoinHandle tracking and abort on disconnect
  • Enhanced status parsing: Extract feed rate (F:) and spindle speed (FS:)
  • Configurable polling rate: Adjustable update frequency (default 200ms)
  • Enable/disable control: Toggle status updates on demand
  • Extended status support: Parse basic and extended GRBL status formats
  • 7 status polling tests: Comprehensive test coverage
  • 54 total tests passing: All tests passing (100%)
  • Real-time monitoring: Continuous position and state updates

Technical Improvements

  • Replaced parking_lot::Mutex with tokio::sync::Mutex for async compatibility
  • Implemented Arc<Mutex> pattern for serial port sharing
  • Added proper async spawning for listener notifications
  • Fixed all compilation errors - library now compiles cleanly
  • Tests pass successfully (2/2 passing)

Architecture

  • Modular design with separate crates for communication, controller, gcode, etc.
  • Async/await throughout using Tokio runtime
  • Event-driven architecture with listener pattern
  • Type-safe API with strong error handling
  • Thread-safe state management with Arc/Mutex

Documentation

  • README with feature comparison to UGS
  • AGENTS.md with development guidelines
  • Inline documentation for all public APIs
  • Code examples in documentation
  • STATS.md with detailed project metrics
  • SPEC.md with project specification
  • docs/IMPLEMENTATION.md with technical details

Testing

  • Test structure in tests/ directory
  • Unit tests for core models
  • Utils tests (clean_gcode_line, format_duration)
  • Integration test placeholders

Known Limitations

  • Response handling not yet wired up (parsers exist but unused)
  • G-code file streaming not yet implemented
  • No 3D visualization
  • Limited to GRBL (TinyG, g2core, Smoothieware planned)

[Unreleased]

Planned

  • Wire up response handlers for status/alarm parsing
  • G-code file streaming with progress tracking
  • 3D toolpath visualization
  • TinyG/g2core controller support
  • Smoothieware support
  • Macro system
  • Probe operations
  • Continuous jogging
  • Keyboard shortcuts
  • Work coordinate system management (G54-G59)
  • Tool length offset
  • Feed/spindle speed overrides
  • Settings persistence
  • Multiple language support
  • Plugin system

Technical Debt

  • Implement proper connection reader loop for responses
  • Add comprehensive test suite for all modules
  • Implement proper G-code file parser
  • Add connection retry logic
  • Add structured logging with tracing