Skip to content

Commit

Permalink
WIP - Remove superclasses to adi libiio base
Browse files Browse the repository at this point in the history
Signed-off-by: Pagadarai <Srikanth.Pagadarai@analog.com>
  • Loading branch information
SrikanthPagadarai committed Aug 15, 2024
1 parent 0fe542d commit 248424a
Show file tree
Hide file tree
Showing 7 changed files with 178 additions and 196 deletions.
2 changes: 1 addition & 1 deletion +adi/+common
Submodule +common updated 1 files
+9 −8 Compat.m
66 changes: 28 additions & 38 deletions +adi/+libiio/attribute.m
Original file line number Diff line number Diff line change
@@ -1,67 +1,57 @@
classdef (Abstract) attribute < handle
% matlabshared.libiio.attribute attribute class for base adi.libiio.support
%
% This abstract system object defines the APIs necessary to use libIIO
% V1.0 for MATLAB/Simulink simulation as well as codegen on a Linux
% target

% Copyright 2024 Analog Devices Inc.
%#codegen

%% Abstract Properties
properties(Abstract, Hidden, Access = protected)
libName
end

methods
function obj = attribute()
% CHANNEL constructor method for matlabshared.libiio.context
%
% Returns the matlabshared.libiio.context object
coder.allowpcode('plain');
end
end
classdef attribute < handle
% methods
% function obj = attribute()
% % CHANNEL constructor method for matlabshared.libiio.context
% %
% % Returns the matlabshared.libiio.context object
% coder.allowpcode('plain');
% end
% end

%% Internal Helper Functions
methods (Hidden, Access = {?handle}, Static)
function [status, value] = iio_attr_read_bool(obj, attrPtr)
methods (Static)
function [status, value] = iio_attr_read_bool(attrPtr)
valPtr = libpointer('bool', 0);
status = calllib(obj.libName, 'iio_attr_read_bool', attrPtr, valPtr);
status = calllib(adi.libiio.attribute.getIIOLibName(), 'iio_attr_read_bool', attrPtr, valPtr);
if ~status
value = valPtr.value;
end
end

function [status, value] = iio_attr_read_longlong(obj, attrPtr)
function [status, value] = iio_attr_read_longlong(attrPtr)
valPtr = libpointer('int64Ptr', 0);
status = calllib(obj.libName, 'iio_attr_read_longlong', attrPtr, valPtr);
status = calllib(adi.libiio.attribute.getIIOLibName(), 'iio_attr_read_longlong', attrPtr, valPtr);
if ~status
value = valPtr.value;
end
end

function [status, value] = iio_attr_read_double(obj, attrPtr)
function [status, value] = iio_attr_read_double(attrPtr)
valPtr = libpointer('double', 0);
status = calllib(obj.libName, 'iio_attr_read_double', attrPtr, valPtr);
status = calllib(adi.libiio.attribute.getIIOLibName(), 'iio_attr_read_double', attrPtr, valPtr);
if ~status
value = valPtr.value;
end
end

function status = iio_attr_write_string(obj, attrPtr, value)
status = calllib(obj.libName, 'iio_attr_write_string', attrPtr, value);
function status = iio_attr_write_string(attrPtr, value)
status = calllib(adi.libiio.attribute.getIIOLibName(), 'iio_attr_write_string', attrPtr, value);
end

function status = iio_attr_write_bool(attrPtr, value)
status = calllib(adi.libiio.attribute.getIIOLibName(), 'iio_attr_write_bool', attrPtr, value);
end

function status = iio_attr_write_bool(obj, attrPtr, value)
status = calllib(obj.libName, 'iio_attr_write_bool', attrPtr, value);
function status = iio_attr_write_longlong(attrPtr, value)
status = calllib(adi.libiio.attribute.getIIOLibName(), 'iio_attr_write_longlong', attrPtr, value);
end

function status = iio_attr_write_longlong(obj, attrPtr, value)
status = calllib(obj.libName, 'iio_attr_write_longlong', attrPtr, value);
function status = iio_attr_write_double(attrPtr, value)
status = calllib(adi.libiio.attribute.getIIOLibName(), 'iio_attr_write_double', attrPtr, value);
end

function status = iio_attr_write_double(obj, attrPtr, value)
status = calllib(obj.libName, 'iio_attr_write_double', attrPtr, value);
function libName = getIIOLibName()
libName = 'libiio1';
end
end
end
13 changes: 5 additions & 8 deletions +adi/+libiio/base.m
Original file line number Diff line number Diff line change
@@ -1,7 +1,4 @@
classdef (Abstract) base < adi.libiio.device & ...
adi.libiio.channel & ...
adi.libiio.context & ...
adi.libiio.top & ...
classdef (Abstract) base < adi.libiio.top & ...
adi.libiio.low_level & ...
matlab.System
properties (Hidden, Access = {?handle}, Abstract)
Expand Down Expand Up @@ -58,7 +55,7 @@
% function status = cPtrCheck(obj,ptr)
% % Returns 0 if ptr is a valid pointer, negative error code
% % otherwise
% status = -int32(isNull(ptr));
% status = -int32(isNull(ptr));
% end
end

Expand All @@ -77,15 +74,15 @@ function setupImpl(obj)

% Get context
% obj.iioCtx = calllib(obj.libName, 'iio_create_context', obj.iioCtxParams, obj.uri);
obj.iioCtx = adi.libiio.context.iio_create_context(obj, obj.iioCtxParams, obj.uri);
obj.iioCtx = adi.libiio.context.iio_create_context(obj.iioCtxParams, obj.uri);
status = -int32(isNull(obj.iioCtx));% cPtrCheck(obj,obj.iioCtx);

% Set context timeout
% status = calllib(obj.libName, 'iio_context_set_timeout', obj.iioCtx, obj.contextTimeout);

% Get AD9361 PHY device
% obj.iioDev = calllib(obj.libName, 'iio_context_find_device', obj.iioCtx, 'ad9361-phy');
[status, obj.iioDev] = adi.libiio.context.iio_context_find_device(obj, obj.iioCtx, 'ad9361-phy');
obj.iioDev = adi.libiio.context.iio_context_find_device(obj.iioCtx, 'ad9361-phy');

obj.needsTeardown = true;

Expand All @@ -94,7 +91,7 @@ function setupImpl(obj)

% Find AD9361 LO channel
% obj.iioChn = calllib(obj.libName, 'iio_device_find_channel', obj.iioDev, 'altvoltage0', true);
obj.iioChn = adi.libiio.device.iio_device_find_channel(obj, obj.iioDev, 'altvoltage0', true);
obj.iioChn = adi.libiio.device.iio_device_find_channel(obj.iioDev, 'altvoltage0', true);

% obj.iioAttr = calllib(obj.libName, 'iio_channel_find_attr', obj.iioChn, 'frequency');

Expand Down
61 changes: 25 additions & 36 deletions +adi/+libiio/channel.m
Original file line number Diff line number Diff line change
@@ -1,18 +1,4 @@
classdef (Abstract) channel < adi.libiio.attribute
% matlabshared.libiio.channel_V1p0 channel class for base matlabshared.libiio.support
%
% This abstract system object defines the APIs necessary to use libIIO
% V1.0 for MATLAB/Simulink simulation as well as codegen on a Linux
% target

% Copyright 2024 Analog Devices Inc.
%#codegen

%% Abstract Properties
properties(Abstract, Hidden, Access = protected)
libName
end

classdef channel < handle
methods
function obj = channel()
% CHANNEL constructor method for matlabshared.libiio.context
Expand All @@ -23,40 +9,43 @@
end

%% Internal Helper Functions
methods (Hidden, Access = {?handle}, Static)
function [status, attrPtr] = iio_channel_find_attr(obj,chanPtr,attr)
attrPtr = calllib(obj.libName, 'iio_channel_find_attr', chanPtr, attr);
status = cPtrCheck(obj,attrPtr);
methods (Static)
function attrPtr = iio_channel_find_attr(chanPtr,attr)
attrPtr = calllib(adi.libiio.channel.getIIOLibName(), 'iio_channel_find_attr', chanPtr, attr);
end

function [status, value] = iio_channel_attr_read_bool(obj,chanPtr,attr)
[status, attrPtr] = adi.libiio.channel.iio_channel_find_attr(obj,chanPtr,attr);
cstatus(obj,status,['Attribute: ' attr ' not found']);
[status, value] = adi.libiio.attribute.iio_attr_read_bool(obj,attrPtr);
function [status, value] = iio_channel_attr_read_bool(chanPtr,attr)
attrPtr = adi.libiio.channel.iio_channel_find_attr(chanPtr,attr);
% cstatus(status,['Attribute: ' attr ' not found']);
[status, value] = adi.libiio.attribute.iio_attr_read_bool(attrPtr);
end

function [status, value] = iio_channel_attr_read_longlong(obj,chanPtr,attr)
[status, attrPtr] = adi.libiio.channel.iio_channel_find_attr(obj,chanPtr,attr);
cstatus(obj,status,['Attribute: ' attr ' not found']);
[status, value] = adi.libiio.attribute.iio_attr_read_longlong(obj,attrPtr);
function [status, value] = iio_channel_attr_read_longlong(chanPtr,attr)
attrPtr = adi.libiio.channel.iio_channel_find_attr(chanPtr,attr);
% cstatus(status,['Attribute: ' attr ' not found']);
[status, value] = adi.libiio.attribute.iio_attr_read_longlong(attrPtr);
end

function status = iio_channel_attr_write_bool(obj,chanPtr,attr,value)
[status, attrPtr] = adi.libiio.channel.iio_channel_find_attr(obj,chanPtr,attr);
cstatus(obj,status,['Attribute: ' attr ' not found']);
function status = iio_channel_attr_write_bool(chanPtr,attr,value)
attrPtr = adi.libiio.channel.iio_channel_find_attr(chanPtr,attr);
% cstatus(status,['Attribute: ' attr ' not found']);
status = adi.libiio.attribute.iio_attr_write_bool(attrPtr, value);
end

function status = iio_channel_attr_write_longlong(obj,chanPtr,attr,value)
[status, attrPtr] = adi.libiio.channel.iio_channel_find_attr(obj,chanPtr,attr);
cstatus(obj,status,['Attribute: ' attr ' not found']);
function status = iio_channel_attr_write_longlong(chanPtr,attr,value)
attrPtr = adi.libiio.channel.iio_channel_find_attr(chanPtr,attr);
% cstatus(status,['Attribute: ' attr ' not found']);
status = adi.libiio.attribute.iio_attr_write_longlong(attrPtr, value);
end

function nBytes = iio_channel_attr_write(obj, chanPtr, attr, src)
[status, attrPtr] = adi.libiio.channel.iio_channel_find_attr(obj,chanPtr,attr);
cstatus(obj,status,['Attribute: ' attr ' not found']);
function nBytes = iio_channel_attr_write(chanPtr, attr, src)
attrPtr = adi.libiio.channel.iio_channel_find_attr(chanPtr,attr);
% cstatus(status,['Attribute: ' attr ' not found']);
nBytes = adi.libiio.attribute.iio_attr_write_string(attrPtr, src);
end

function libName = getIIOLibName()
libName = 'libiio1';
end
end
end
43 changes: 11 additions & 32 deletions +adi/+libiio/context.m
Original file line number Diff line number Diff line change
@@ -1,38 +1,17 @@
classdef (Abstract) context < handle% & matlabshared.libiio.context & ...
%matlabshared.libiio.device
% matlabshared.libiio.contextV1p0 context class for base matlabshared.libiio.support
%
% This abstract system object defines the APIs necessary to use libIIO
% V1.0 for MATLAB/Simulink simulation as well as codegen on a Linux
% target

% Copyright 2024 Analog Devices Inc.
%#codegen

%% Abstract Properties
properties(Abstract, Hidden, Access = protected)
libName
end

methods
function obj = context()
% CONTEXT constructor method for matlabshared.libiio.context
%
% Returns the matlabshared.libiio.context object
coder.allowpcode('plain');
end
end

classdef context < handle
%% Internal Helper Functions
methods (Hidden, Access = {?handle}, Static)
methods (Static)
%% Context Methods
function ctxPtr = iio_create_context(obj, ctxParamsPtr, uri)
ctxPtr = calllib(obj.libName, 'iio_create_context', ctxParamsPtr, uri);
function ctxPtr = iio_create_context(ctxParamsPtr, uri)
ctxPtr = calllib(adi.libiio.context.getIIOLibName(), 'iio_create_context', ctxParamsPtr, uri);
end

function [status, devPtr] = iio_context_find_device(obj, ctxPtr, name)
devPtr = calllib(obj.libName, 'iio_context_find_device', ctxPtr, name);
status = cPtrCheck(obj,devPtr);
end
function devPtr = iio_context_find_device(ctxPtr, name)
devPtr = calllib(adi.libiio.context.getIIOLibName(), 'iio_context_find_device', ctxPtr, name);
end

function libName = getIIOLibName()
libName = 'libiio1';
end
end
end
Loading

0 comments on commit 248424a

Please sign in to comment.