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.
1. 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);
2. 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'