diff --git a/+adi/+AD5710r/Tx.m b/+adi/+AD5710r/Tx.m
new file mode 100644
index 0000000..d57f3e7
--- /dev/null
+++ b/+adi/+AD5710r/Tx.m
@@ -0,0 +1,112 @@
+classdef Tx < adi.common.Tx & matlabshared.libiio.base & adi.common.Attribute
+ % AD5710r 16-bit Configurable IDAC/VDAC Class
+ % adi.AD5710r.Rx Transmits data to the AD5710r DAC
+ % The adi.AD5710r.Tx System object is a signal sink that can transmit
+ % data to the AD5710r.
+ %
+ % tx = adi.AD5710r.Tx;
+ % tx = adi.AD5710r.Tx('uri','ip:192.168.2.1');
+ %
+ %
+
+ properties
+ % SampleRate Sample Rate
+ % Baseband sampling rate in Hz, specified as a scalar
+ % in samples per second.
+ SampleRate = '50000'
+ end
+
+ properties
+ % ChMode Channel Mode
+ % COnfigure the channel mode of the device channels.
+ % Options are 'VMODE', 'IMODE'.
+ ChMode = 'VMODE'
+ end
+
+ properties (Nontunable)
+ SamplesPerFrame
+ end
+
+ properties (Nontunable, Hidden, Constant)
+ Type = 'Tx'
+ end
+
+ properties (Constant, Hidden)
+ ChModeSet = matlab.system.StringSet([ ...
+ "V_MODE", "I_MODE"]);
+ end
+
+ % Channel names
+ properties (Nontunable, Hidden)
+ channel_names = {'voltage0', 'voltage1', 'voltage2', 'voltage3', ...
+ 'voltage4', 'voltage5', 'voltage6', 'voltage7'}
+ end
+
+ properties (Hidden, Nontunable, Access = protected)
+ isOutput = true
+ end
+
+ properties (Nontunable, Hidden)
+ Timeout = Inf
+ kernelBuffersCount = 1
+ dataTypeStr = 'int16'
+ phyDevName = 'ad5710r'
+ devName = 'ad5710r'
+ end
+
+ properties (Hidden, Constant)
+ ComplexData = false
+ end
+
+ methods
+
+ %% Constructor
+ function obj = Tx(varargin)
+ obj = obj@matlabshared.libiio.base(varargin{:});
+ obj.enableExplicitPolling = false;
+ obj.EnabledChannels = 1;
+ obj.uri = 'ip:analog.local';
+ obj.DataSource = 'DMA';
+ end
+
+ function set.SampleRate(obj, value)
+ % Set device sampling rate
+ obj.SampleRate = value;
+ if obj.ConnectedToDevice
+ obj.setDeviceAttributeRAW('sampling_frequency', num2str(value));
+ end
+ end
+
+ function set.ChMode(obj, value)
+ % Set channel mode
+ obj.ChMode = value;
+ if obj.ConnectedToDevice
+ for i=1:length(obj.channel_names)
+ if (ismember(i, obj.EnabledChannels))
+ obj.setAttributeRAW(obj.channel_names{i}, 'ch_mode', num2str(value), true);
+ end
+ end
+ end
+ end
+ end
+
+ %% API Functions
+ methods (Hidden, Access = protected)
+
+ function setupInit(obj)
+ % Write all attributes to device once connected through set
+ % methods
+ % Do writes directly to hardware without using set methods.
+ % This is required since Simulink support doesn't support
+ % modification to nontunable variables at SetupImpl
+ obj.setDeviceAttributeRAW('sampling_frequency',num2str(obj.SampleRate))
+ obj.setDeviceAttributeRAW('all_ch_operating_mode', 'normal_operation')
+ for i=1:length(obj.channel_names)
+ if (ismember(i, obj.EnabledChannels))
+ obj.setAttributeRAW(obj.channel_names{i}, 'ch_mode', num2str(obj.ChMode), true);
+ end
+ end
+ end
+
+ end
+end
\ No newline at end of file
diff --git a/+adi/Contents.m b/+adi/Contents.m
index 96c4a9f..a6802f5 100644
--- a/+adi/Contents.m
+++ b/+adi/Contents.m
@@ -73,4 +73,5 @@
% AD7124_8 - ADC
% AD4080 - ADC
% AD5592r - ADC
-% AD5593r - ADC
\ No newline at end of file
+% AD5593r - ADC
+% AD5710r - DAC
\ No newline at end of file
diff --git a/CI/gen_doc/docs/gen_sysobj_doc.m b/CI/gen_doc/docs/gen_sysobj_doc.m
index 181f223..afd00f4 100644
--- a/CI/gen_doc/docs/gen_sysobj_doc.m
+++ b/CI/gen_doc/docs/gen_sysobj_doc.m
@@ -50,6 +50,7 @@
, {'AD4080', {'Rx'}}...
, {'AD5592r', {'Rx'}}...
, {'AD5593r', {'Rx'}}...
+ , {'AD5710r', {'Rx'}}...
%{'QuadMxFE',{'Rx','Tx'}}...
};
diff --git a/docs/source/index.rst b/docs/source/index.rst
index f5a76c2..e0b10b0 100644
--- a/docs/source/index.rst
+++ b/docs/source/index.rst
@@ -87,3 +87,4 @@ The following have device-specific implementations in MATLAB and Simulink. In ge
"AD4190", "SDP-K1", "Yes", "No", "ADI (2021b)"
"AD5592r", "SDP-K1", "Yes", "No", "ADI (2021b)"
"AD5593r", "SDP-K1", "Yes", "No", "ADI (2021b)"
+ "AD5710rr", "SDP-K1", "Yes", "No", "ADI (2021b)"
\ No newline at end of file
diff --git a/examples/ad5710r_DataStreaming.m b/examples/ad5710r_DataStreaming.m
new file mode 100644
index 0000000..4397000
--- /dev/null
+++ b/examples/ad5710r_DataStreaming.m
@@ -0,0 +1,36 @@
+%% Script for generating and transmitting a set of samples to a
+%% connected AD5710r board
+
+%% Generate data
+samplerate = 50000;
+amplitude = 2^15;
+frequency = 250;
+sine_wave = dsp.SineWave(amplitude, frequency);
+sine_wave.ComplexOutput = false;
+sine_wave.SamplesPerFrame = 200;
+sine_wave.SampleRate = samplerate;
+sine_wave.PhaseOffset = [0 pi/2 pi];
+data = sine_wave();
+
+% Add offset for unipolar DAC
+data = data+2^15;
+data = uint16(data);
+
+%% Tx set up
+% Instantiate the system object
+tx = adi.AD5710r.Tx;
+% Specify uri
+tx.uri = 'serial:COM18,230400';
+tx.EnableCyclicBuffers = true;
+tx.SampleRate = samplerate;
+tx.ChMode = 'VMODE';
+tx.EnabledChannels = [1 2 3];
+
+% Stream data
+tx(data)
+
+% Pause the execution to see the ouput for 5 seconds
+pause(5);
+
+% Delete the system object
+tx.release();
\ No newline at end of file