A modern Windows desktop application for real-time GM vehicle CAN bus monitoring and decoding
| Feature | Description |
|---|---|
| Real-time CAN Monitoring | Live capture and display of GMLan traffic with up to hundreds of messages per second |
| Message Decoding | Convert raw CAN IDs to human-readable format with ECU identification |
| High-Volume Processing | Efficient handling of large amounts of CAN traffic with configurable buffering (default 500 messages) |
| Smart Filtering | Show all, show selected, or hide selected message types with real-time statistics |
| Message Deduplication | Intelligent caching system filters repeated identical messages (configurable time windows) |
| Arduino Integration | Automatic device detection and serial communication at 115200 baud |
| Protocol Support | Comprehensive mapping for 195+ GMLan message types (88 HS-GMLan, 107+ LS-GMLan) |
| Virtual List View | Double-buffered, high-performance rendering for smooth display |
| High-Speed GMLan (88 Messages) | Low-Speed GMLan (107+ Messages) |
|---|---|
| Engine Status (5 variants) | Power Mode Management |
| Transmission Status (3 variants) | Door Lock/Unlock Status |
| Wheel Rotational Status | Climate Control Systems |
| Brake & Cruise Control | GPS Date/Time & Location |
| Steering Wheel Angle | Seat Temperature Control |
| Vehicle Speed & Distance | Window/Mirror Controls |
| Battery Information | Audio/Entertainment Systems |
| ABS/TC Status | Airbag Systems |
| Torque Requests & Status | Lighting Controls |
| Hybrid System Information | Security Systems |
| VIN Information | Parking Assistance |
| Diagnostic Trouble Codes | Display/Infotainment Commands |
| Platform Configuration | Tire Pressure Monitoring |
GMLanDebug automatically identifies the sender ECU based on CAN ID ranges:
| ECU Category | ID Range | Examples |
|---|---|---|
| Powertrain Integration | 0x00-0x10 | Manufacturing systems |
| Engine Controllers | 0x10-0x18 | ECM, TCM |
| Transmission Controllers | 0x18-0x20 | Transmission control modules |
| Chassis Integration | 0x20-0x28 | Chassis systems |
| Brake Controllers | 0x28-0x30 | ABS, TC, ESP |
| Steering Controllers | 0x30-0x38 | Power steering |
| Suspension Controllers | 0x38-0x40 | Active suspension |
| Body Integration | 0x40-0x58 | Body control modules |
| Restraints | 0x58-0x60 | Airbag systems |
| Driver Information | 0x60-0x70 | Instrument clusters |
| Lighting | 0x70-0x80 | Headlights, signals |
| Entertainment/Audio | 0x80-0xA0 | Radio, infotainment |
| Convenience | 0xA0-0xC0 | Doors, seats, windows |
| Security | 0xC0-0xC8 | Anti-theft systems |
| Component | Specification |
|---|---|
| Arduino | Uno, Uno R3, or Due |
| CAN Controller | MCP2515 (recommended) |
| Shield | Seeed Studio CANBUS Shield (compatible) |
| Connection | USB to PC |
| Vendor ID | 0x2341 (Arduino) |
| Supported Models | Uno (0x0001), Uno R3 (0x0043), Due (0x003E) |
Arduino CAN Shield
↓
Serial Port (115200 baud)
↓
SerialPortReader (async DataReceived event)
↓
ConcurrentQueue<string>
↓
GMLanMessage Parser (regex-based)
↓
Message Cache (deduplication)
↓
Filter System (show/hide logic)
↓
Virtual ListView (UI display)
GMLanDebug parses CAN messages into structured data:
| Field | Example | Description |
|---|---|---|
| CAN ID | 0x0C030040 | Full extended CAN identifier |
| Header | 0x0C0300 | Protocol header (6 hex digits) |
| Sender | 0x40 (64) | ECU identifier |
| Priority | 0x0C | Message priority |
| DLC | 8 | Data Length Code (1-8 bytes) |
| Data | 0x0 0x0 0x0... | Payload bytes |
| Message Type | Header | Decoded Output |
|---|---|---|
| GPS Date/Time | 0x100A60 | "HH:MM:SS - Month Day Year" |
| Vehicle Speed | 0x3E9 | Speed and odometer data |
| Engine Status | 0x0C9 | RPM, temperature, status flags |
GMLanDebug/
├── Program.cs # Entry point (console window allocation)
├── MainWindow.cs # Main UI logic and message processing
├── App.config # .NET Framework 4.8 configuration
│
├── ui/ # User interface components
│ ├── FilterControlWindow.cs # Message filtering UI
│ ├── MessageViewWindow.cs # Detailed message viewer
│ ├── SerialDevicePicker.cs # Arduino device selection
│ ├── GMLanListViewItem.cs # Message list rendering
│ └── GMLanMessageCache.cs # Deduplication cache
│
├── util/ # Core logic components
│ ├── GMLanMessage.cs # CAN message parsing
│ ├── GMLanMapping.cs # Protocol mapping structure
│ ├── MessageTranslation.cs # Data interpretation
│ │
│ ├── serial/ # Arduino communication
│ │ ├── SerialDevice.cs # Device information
│ │ ├── SerialPortReader.cs # Async serial reading
│ │ ├── SerialPortScanner.cs # Windows device enumeration (WMI)
│ │ └── SerialUtils.cs # Arduino model identification
│ │
│ └── translation/ # Protocol-specific parsers
│ ├── HsLan.cs # High-speed CAN mappings (88 messages)
│ ├── LsLan.cs # Low-speed CAN mappings (107+ messages)
│ └── TranslationUtils.cs # Helper utilities
│
└── Properties/ # .NET project properties
| Optimization | Implementation |
|---|---|
| Virtual ListView | Lazy loading with double-buffered rendering |
| Message Deduplication | Concurrent dictionary with configurable expiration (default 3000ms) |
| Thread-Safe Queuing | ConcurrentQueue for message processing |
| Configurable Retention | User-adjustable max messages (default 500) |
| Background Cleanup | Automatic cache cleanup (default 1000ms interval) |
| Auto-Scroll Control | Scroll to bottom only when active logging |
| Resource | Description |
|---|---|
| GMLanBible | Comprehensive GMLan protocol documentation |
| Doc88 Downloader | PDF documentation extraction tool |
| PCM Hacking | Automotive hacking and reverse engineering resources |
Built with C# and .NET Framework 4.8 for high-performance GM vehicle diagnostics

