HAL Across Domains: How Different Systems Define Hardware Abstraction Layers
Published:
Different domains define HAL differently based on their needs:
1. Autonomous Driving Domain Controllers
HAL Purpose: Abstract sensor and actuator hardware
Typical HAL Structure:
// Example concepts (not actual code)
class SensorHAL {
// LiDAR abstraction
virtual PointCloud readLiDAR() = 0;
// Camera abstraction
virtual ImageFrame readCamera(int camera_id) = 0;
// Radar abstraction
virtual RadarData readRadar() = 0;
// GPS/IMU abstraction
virtual PoseData readPose() = 0;
};
class ActuatorHAL {
// Steering control
virtual void setSteeringAngle(float angle) = 0;
// Throttle/brake control
virtual void setThrottle(float value) = 0;
virtual void setBrake(float value) = 0;
// Transmission control
virtual void setGear(int gear) = 0;
};
Key Differences from LinuxCNC HAL:
- Focuses on sensor fusion and vehicle control
- Higher-level APIs (images, point clouds, vehicle commands)
- Handles complex sensor calibration, synchronization
- Often event-driven + periodic processing
- Safety-critical with redundancy
2. Robotics Frameworks (ROS, etc.)
HAL Purpose: Abstract robot hardware (motors, sensors, grippers)
Typical Structure:
// Example concepts
class RobotHAL {
// Joint control
virtual void setJointPosition(int joint_id, float position) = 0;
virtual float getJointPosition(int joint_id) = 0;
// Sensor access
virtual SensorData readSensor(int sensor_id) = 0;
// Actuator control
virtual void setActuator(int actuator_id, float value) = 0;
};
Key Features:
- Joint space abstractions (similar to kinematics in LinuxCNC)
- Often uses middleware (ROS, DDS)
- Supports complex robots (humanoids, mobile bases, manipulators)
3. Embedded Systems (ARM Mbed, Arduino HAL)
HAL Purpose: Abstract microcontroller peripherals
Typical Structure:
// Example
class GPIO_HAL {
void pinMode(int pin, Mode mode);
void digitalWrite(int pin, bool value);
bool digitalRead(int pin);
};
class SPI_HAL {
void begin();
void transfer(uint8_t data);
};
Key Features:
- Low-level peripheral abstraction (GPIO, UART, SPI, I2C, ADC)
- Very close to hardware
- Minimal overhead
4. Operating System HAL (Windows, embedded Linux)
HAL Purpose: Abstract platform differences (CPU, interrupt controller, DMA)
Functions (like Windows HAL.dll):
- Interrupt management
- DMA operations
- Processor initialization
- Bus operations
- Timer access
Key Features:
- Very low-level (kernel mode)
- Platform-specific implementations
- OS-level abstraction
Comparison Table
| Domain | HAL Level | Abstraction | Focus |
|---|---|---|---|
| LinuxCNC | Application (real-time) | Motion hardware, signals | Step/direction, encoders, PID loops |
| Autonomous Driving | Application | Sensors, vehicle actuators | LiDAR, cameras, steering/brake |
| Robotics (ROS) | Application/Middleware | Robot joints, sensors | Joint control, sensor fusion |
| Embedded Systems | Firmware | MCU peripherals | GPIO, UART, SPI, ADC |
| OS (Windows) | Kernel | Platform hardware | Interrupts, DMA, processors |
Key Insight
The term “HAL” is generic, and each system defines it for its domain:
- What hardware needs abstracting? (LinuxCNC: motion hardware, Autonomous: sensors/vehicle)
- What level of abstraction? (LinuxCNC: signal routing, Embedded: register access)
- What operations are needed? (LinuxCNC: real-time control loops, Autonomous: sensor reading/actuator control)
