Extending Device Interfaces#
By default, only a small number of settings are available as direct attributes for many of the devices like the transceiver. This is primarily done to not burden the user with too many knobs which they do not care about since a device the transceiver can have over 100 addressable attributes. However, sometimes you want to get access to more IIO attributes available in the driver.
The MATLAB and Simulink interfaces can be extended in two ways.
Directly Addressing Attributes#
Directly address properties through the underlying libIIO API calls. By default the AD9361 receiver interfaces only provide or control the following properties:
rx =
adi.AD9361.Rx with properties:
CenterFrequency: 2.4000e+09
SamplingRate: 3000000
RFBandwidth: 3000000
GainControlModeChannel0: 'slow_attack'
EnableQuadratureTracking: true
EnableRFDCTracking: true
EnableBasebandDCTracking: true
SamplesPerFrame: 32768
channelCount: 2
EnableCustomFilter: false
uri: 'ip:192.168.2.1'
This does not provide status attributes or other more obscure control attributes. For example, the RSSI measurement is not provided as part of the AD9361 transceiver interfaces. To read this attribute directly we could do the following with the common abstractions from here:
rx = adi.AD9361.Rx('uri','ip:192.168.2.1');
rssiValue = rx.getAttributeLongLong('voltage0','rssi',false);
Adding MATLAB Properties For Attributes#
If additional APIs are needed for a device, and that code will be used by others, then it is recommended to add an actual property to the class. This can provide additional documentation as well as range checking. Below the Rx class is modified to allow to selection of the RF port attribute of the transceiver. This is done by inserting the following:
properties
%RFPort RF Port
% specified as one of the following:
% 'A_BALANCED' - Select A Balanced RF input
% 'B_BALANCED' - Select B Balanced RF input
% 'TX_MONITOR1' - Select TX Monitor 1 RF input
% 'TX_MONITOR2' - Select TX Monitor 2 RF input
RFPort = 'A_BALANCED';
end
Now under the standard methods scope the following set method is added
% Check RFPort
function set.RFPort (obj, value)
obj.RFPort = value;
if obj.ConnectedToDevice
id = 'voltage1';
obj.setAttributeRAW(id,'rf_port_select',value,false);
end
end
Now when the class is expanded the new property is populated:
rx =
adi.AD9361.Rx with properties:
CenterFrequency: 2.4000e+09
SamplingRate: 3000000
RFBandwidth: 3000000
RFPort: 'A_BALANCED'
GainControlModeChannel0: 'slow_attack'
EnableQuadratureTracking: true
EnableRFDCTracking: true
EnableBasebandDCTracking: true
SamplesPerFrame: 32768
channelCount: 2
EnableCustomFilter: false
uri: 'ip:192.168.2.1'