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:
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.
HAL& hal = HAL::instance(); eeros::hal::Output<double>* pwm = hal.getScalableOutput("pwm1"); hal.callOutputFeature(pwm, "setPwmFrequency", 100.0); hal.releaseOutput("pwm1");
The control system defines a peripheral output objects which is connected to our HAL object. The control system will usually periodically write to this output and set the duty cycle. However, if you wish to change the frequency of the signal you must again use the feature function as follows:
PeripheralOutput<double> motorSpeed("pwm1"); motorSpeed.callOutputFeature("setPwmFrequency", 200.0);