diff options
Diffstat (limited to 'bindings/matlab/iio_sys_obj_matlab.m')
-rw-r--r-- | bindings/matlab/iio_sys_obj_matlab.m | 350 |
1 files changed, 0 insertions, 350 deletions
diff --git a/bindings/matlab/iio_sys_obj_matlab.m b/bindings/matlab/iio_sys_obj_matlab.m deleted file mode 100644 index 572ec03..0000000 --- a/bindings/matlab/iio_sys_obj_matlab.m +++ /dev/null @@ -1,350 +0,0 @@ -% Copyright 2014(c) Analog Devices, Inc. -% -% All rights reserved. -% -% Redistribution and use in source and binary forms, with or without modification, -% are permitted provided that the following conditions are met: -% - Redistributions of source code must retain the above copyright -% notice, this list of conditions and the following disclaimer. -% - Redistributions in binary form must reproduce the above copyright -% notice, this list of conditions and the following disclaimer in -% the documentation and/or other materials provided with the -% distribution. -% - Neither the name of Analog Devices, Inc. nor the names of its -% contributors may be used to endorse or promote products derived -% from this software without specific prior written permission. -% - The use of this software may or may not infringe the patent rights -% of one or more patent holders. This license does not release you -% from the requirement that you obtain separate licenses from these -% patent holders to use this software. -% - Use of the software either in source or binary form or filter designs -% resulting from the use of this software, must be connected to, run -% on or loaded to an Analog Devices Inc. component. -% -% THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, -% INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A -% PARTICULAR PURPOSE ARE DISCLAIMED. -% -% IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -% EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY -% RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -% BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -% STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF -% THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -classdef iio_sys_obj_matlab - % iio_sys_obj System Object block for IIO devices - - properties (Access = public) - % Public, non-tunable properties. - - %ip_address IP address - ip_address = ''; - - %dev_name Device name - dev_name = ''; - - %in_ch_no Number of input data channels - in_ch_no = 0; - - %in_ch_size Input data channel size [samples] - in_ch_size = 8192; - - %out_ch_no Number of output data channels - out_ch_no = 0; - - %out_ch_size Output data channel size [samples] - out_ch_size = 8192; - end - - properties (Access = public) - % Protected class properties. - - %iio_dev_cfg Device configuration structure - iio_dev_cfg = []; - end - - properties (Access = private) - % Private class properties. - - %libiio_data_in_dev libiio IIO interface object for the input data device - libiio_data_in_dev = {}; - - %libiio_data_out_dev libiio IIO interface object for the output data device - libiio_data_out_dev = {}; - - %libiio_ctrl_dev libiio IIO interface object for the control device - libiio_ctrl_dev = {}; - - %sys_obj_initialized Holds the initialization status of the system object - sys_obj_initialized = 0; - end - - properties (Access = private) - % Discrete state properties. - - %num_cfg_in Numeric type input control channels data - num_cfg_in; - - %str_cfg_in String type input control channels data - str_cfg_in; - end - - methods - %% Constructor - function obj = iio_sys_obj_matlab(varargin) - % Construct the libiio interface objects - obj.libiio_data_in_dev = libiio_if(); - obj.libiio_data_out_dev = libiio_if(); - obj.libiio_ctrl_dev = libiio_if(); - end - end - - methods (Access = protected) - %% Utility functions - - function config = getObjConfig(obj) - % Read the selected device configuration - - % Open the configuration file - fname = sprintf('%s.cfg', obj.dev_name); - fp_cfg = fopen(fname); - if(fp_cfg < 0) - config = {}; - return; - end - - % Build the object configuration structure - config = struct('data_in_device', '',... % Pointer to the data input device - 'data_out_device', '',... % Pointer to the data output device - 'ctrl_device', '',... % Pointer to the control device - 'cfg_ch', [],... % Configuration channels list - 'mon_ch', [],... % Monitoring channels list - 'in_ch_names', [],... % Configuration channels names - 'out_ch_names', []); % Monitoring channels names - config.in_ch_names = {}; - config.out_ch_names = {}; - - % Build the configuration/monitoring channels structure - ch_cfg = struct('port_name', '',... % Name of the port to be displayed on the object block - 'port_attr', '',... % Associated device attribute name - 'ctrl_dev_name', '',... % Control device name - 'ctrl_dev', 0); % Pointer to the control device object - - % Read the object's configuration - while(~feof(fp_cfg)) - line = fgets(fp_cfg); - if(strfind(line,'#')) - continue; - end - if(~isempty(strfind(line, 'channel'))) - % Get the associated configuration/monitoring channels - idx = strfind(line, '='); - line = line(idx+1:end); - line = strsplit(line, ','); - ch_cfg.port_name = strtrim(line{1}); - ch_cfg.port_attr = strtrim(line{3}); - if(length(line) > 4) - ch_cfg.ctrl_dev_name = strtrim(line{4}); - else - ch_cfg.ctrl_dev_name = 'ctrl_device'; - end - if(strcmp(strtrim(line{2}), 'IN')) - config.cfg_ch = [config.cfg_ch ch_cfg]; - config.in_ch_names = [config.in_ch_names ch_cfg.port_name]; - elseif(strcmp(strtrim(line{2}), 'OUT')) - config.mon_ch = [config.mon_ch ch_cfg]; - config.out_ch_names = [config.out_ch_names ch_cfg.port_name]; - end - elseif(~isempty(strfind(line, 'data_in_device'))) - % Get the associated data input device - idx = strfind(line, '='); - tmp = line(idx+1:end); - tmp = strtrim(tmp); - config.data_in_device = tmp; - elseif(~isempty(strfind(line, 'data_out_device'))) - % Get the associated data output device - idx = strfind(line, '='); - tmp = line(idx+1:end); - tmp = strtrim(tmp); - config.data_out_device = tmp; - elseif(~isempty(strfind(line, 'ctrl_device'))) - % Get the associated control device - idx = strfind(line, '='); - tmp = line(idx+1:end); - tmp = strtrim(tmp); - config.ctrl_device = tmp; - end - end - fclose(fp_cfg); - end - - end - - methods (Access = public) - %% Helper functions - function ret = getInChannel(obj, channelName) - % Returns the index of a named input channel - ret = obj.in_ch_no + find(strcmp(obj.iio_dev_cfg.in_ch_names, channelName)); - end - - function ret = getOutChannel(obj, channelName) - % Returns the index of a named output channel - ret = obj.out_ch_no + find(strcmp(obj.iio_dev_cfg.out_ch_names, channelName)); - end - - %% Common functions - function ret = setupImpl(obj) - % Implement tasks that need to be performed only once. - - % Set the initialization status to fail - obj.sys_obj_initialized = 0; - - % Read the object's configuration from the associated configuration file - obj.iio_dev_cfg = getObjConfig(obj); - if(isempty(obj.iio_dev_cfg)) - msgbox('Could not read device configuration!', 'Error','error'); - return; - end - - % Initialize discrete-state properties. - obj.num_cfg_in = zeros(1, length(obj.iio_dev_cfg.cfg_ch)); - obj.str_cfg_in = zeros(length(obj.iio_dev_cfg.cfg_ch), 64); - - % Initialize the libiio data input device - if(obj.in_ch_no ~= 0) - [ret, err_msg, msg_log] = init(obj.libiio_data_in_dev, obj.ip_address, ... - obj.iio_dev_cfg.data_in_device, 'OUT', ... - obj.in_ch_no, obj.in_ch_size); - fprintf('%s', msg_log); - if(ret < 0) - msgbox(err_msg, 'Error','error'); - return; - end - end - - % Initialize the libiio data output device - if(obj.out_ch_no ~= 0) - [ret, err_msg, msg_log] = init(obj.libiio_data_out_dev, obj.ip_address, ... - obj.iio_dev_cfg.data_out_device, 'IN', ... - obj.out_ch_no, obj.out_ch_size); - fprintf('%s', msg_log); - if(ret < 0) - msgbox(err_msg, 'Error','error'); - return; - end - end - - % Initialize the libiio control device - if(~isempty(obj.iio_dev_cfg.ctrl_device)) - [ret, err_msg, msg_log] = init(obj.libiio_ctrl_dev, obj.ip_address, ... - obj.iio_dev_cfg.ctrl_device, '', ... - 0, 0); - fprintf('%s', msg_log); - if(ret < 0) - msgbox(err_msg, 'Error','error'); - return; - end - end - - % Assign the control device for each monitoring channel - for i = 1 : length(obj.iio_dev_cfg.mon_ch) - if(strcmp(obj.iio_dev_cfg.mon_ch(i).ctrl_dev_name, 'data_in_device')) - obj.iio_dev_cfg.mon_ch(i).ctrl_dev = obj.libiio_data_in_dev; - elseif(strcmp(obj.iio_dev_cfg.mon_ch(i).ctrl_dev_name, 'data_out_device')) - obj.iio_dev_cfg.mon_ch(i).ctrl_dev = obj.libiio_data_out_dev; - else - obj.iio_dev_cfg.mon_ch(i).ctrl_dev = obj.libiio_ctrl_dev; - end - end - - % Assign the control device for each configuration channel - for i = 1 : length(obj.iio_dev_cfg.cfg_ch) - if(strcmp(obj.iio_dev_cfg.cfg_ch(i).ctrl_dev_name, 'data_in_device')) - obj.iio_dev_cfg.cfg_ch(i).ctrl_dev = obj.libiio_data_in_dev; - elseif(strcmp(obj.iio_dev_cfg.cfg_ch(i).ctrl_dev_name, 'data_out_device')) - obj.iio_dev_cfg.cfg_ch(i).ctrl_dev = obj.libiio_data_out_dev; - else - obj.iio_dev_cfg.cfg_ch(i).ctrl_dev = obj.libiio_ctrl_dev; - end - end - - % Set the initialization status to success - obj.sys_obj_initialized = 1; - ret = obj; - end - - function releaseImpl(obj) - % Release any resources used by the system object. - obj.iio_dev_cfg = {}; - delete(obj.libiio_data_in_dev); - delete(obj.libiio_data_out_dev); - delete(obj.libiio_ctrl_dev); - end - - function ret = stepImpl(obj, varargin) - % Implement the system object's processing flow. - varargout = cell(1, obj.out_ch_no + length(obj.iio_dev_cfg.mon_ch)); - if(obj.sys_obj_initialized == 0) - return; - end - - % Implement the device configuration flow - for i = 1 : length(obj.iio_dev_cfg.cfg_ch) - if(~isempty(varargin{1}{i + obj.in_ch_no})) - if(length(varargin{1}{i + obj.in_ch_no}) == 1) - new_data = (varargin{1}{i + obj.in_ch_no} ~= obj.num_cfg_in(i)); - else - new_data = ~strncmp(char(varargin{1}{i + obj.in_ch_no}'), char(obj.str_cfg_in(i,:)), length(varargin{1}{i + obj.in_ch_no})); - end - if(new_data == 1) - if(length(varargin{1}{i + obj.in_ch_no}) == 1) - obj.num_cfg_in(i) = varargin{1}{i + obj.in_ch_no}; - str = num2str(obj.num_cfg_in(i)); - else - for j = 1:length(varargin{1}{i + obj.in_ch_no}) - obj.str_cfg_in(i,j) = varargin{1}{i + obj.in_ch_no}(j); - end - obj.str_cfg_in(i,j+1) = 0; - str = char(obj.str_cfg_in(i,:)); - end - writeAttributeString(obj.iio_dev_cfg.cfg_ch(i).ctrl_dev, obj.iio_dev_cfg.cfg_ch(i).port_attr, str); - end - end - end - - % Implement the data transmit flow - writeData(obj.libiio_data_in_dev, varargin{1}); - - % Implement the data capture flow - [~, data] = readData(obj.libiio_data_out_dev); - for i = 1 : obj.out_ch_no - varargout{i} = data{i}; - end - - % Implement the parameters monitoring flow - for i = 1 : length(obj.iio_dev_cfg.mon_ch) - [~, val] = readAttributeDouble(obj.iio_dev_cfg.mon_ch(i).ctrl_dev, obj.iio_dev_cfg.mon_ch(i).port_attr); - varargout{obj.out_ch_no + i} = val; - end - - ret=varargout; - end - - function ret = writeFirData(obj, fir_data_file) - fir_data_str = fileread(fir_data_file); - ret = writeAttributeString(obj.libiio_ctrl_dev, 'in_out_voltage_filter_fir_en', '0'); - if ret<0 - return; - end - ret = writeAttributeString(obj.libiio_ctrl_dev, 'filter_fir_config', fir_data_str); - if ret<0 - return; - end - ret = writeAttributeString(obj.libiio_ctrl_dev, 'in_out_voltage_filter_fir_en', '1'); - if ret<0 - return; - end - end - end -end |