This is an old revision of the document!
Feature Functions
All inputs and outputs of the HAL have a common set of properties and functions for reading or writing them. Some hardware channels have specific properties not common to other channels, e.g. a pulse width modulated output needs to be assigned its base frequency. Another example would be a digital to analog converter which has a calibration function which needs to be called upon request.
Feature functions are functions which are specific to a HAL object. They can be called by a user with
void callOutputFeature(OutputInterface *obj, std::string featureName, ArgTypesOut... args); void callInputFeature(InputInterface *obj, std::string featureName, ArgTypesIn... args);
The parameter are as follows:
- OutputInterface / InputInterface: the HAL object
- featureName: name of the function as defined in the appropriate hardware wrapper library, see Hardware Libraries.
- args: arguments to this function
The following example shows how to set the frequency of a pulse width modulated output. This is usually done just once. After this you can release the object. Later the control system defines a peripheral output objects which is connected to our HAL object. The control system will then periodically write to this output and set the duty cycle.
HAL& hal = HAL::instance(); eeros::hal::Output<double>* pwm = hal.getScalableOutput("pwm1"); hal.callOutputFeature(pwm, "setPwmFrequency", 100.0); hal.releaseOutput("pwm1"); ... PeripheralOutput<double> motorSpeed("pwm1"); motorSpeed.callOutputFeature("setPwmFrequency", 200.0); ...
Accessing Feature Functions from the Control System
HAL& hal = HAL::instance(); eeros::hal::Output<double>* pwm = hal.getScalableOutput("pwm1"); hal.callOutputFeature(pwm, "setPwmFrequency", 100.0); hal.releaseOutput("pwm1"); ... PeripheralOutput<double> motorSpeed("pwm1"); motorSpeed.callOutputFeature("setPwmFrequency", 200.0); ...