classdef Oscilloscope < Equipment
    %OSCILLOSCOPE Summary of this class goes here
    %   Detailed explanation goes here
    
    properties
        nchannels
        horizontalPosition
        timescale
        ch1
        ch2
        ch3
        ch4
        trigger
        acquisition
    end
    
    methods
        function sc = Oscilloscope(ipAddress,port,nchannels)
            %OSCILLOSCOPE Construct an instance of this class
            %   Detailed explanation goes here
            sc@Equipment(ipAddress,port,-1);
            sc.trigger = Trigger(sc);
            for i = 1:nchannels
                sc.(['ch',num2str(i)]) = Channel(sc,i);
            end
        end
        
        function s = get.acquisition(sc)
            s = sc.query('ACQ:STAT?');
        end
        
        function run(sc)
            sc.write('RUN');
        end
        
        function single(sc)
            sc.write('SING');
        end
        
        function stop(sc)
            sc.write('STOP');
        end
        
        function auto(sc)
            sc.write_noerror('AUT');
        end
        
        function enable_channels(sc)
            for i = 1:sc.nchannels
                sc.(['ch',num2str(i)]).state = 'ON';
            end
        end
        
        function disable_channels(sc)
            for i = 1:sc.nchannels
                sc.(['ch',num2str(i)]).state = 'OFF';
            end
        end
        
        function setMeasurement(sc,measurement,type,source1,source2)
            prefix = ['MEAS',num2str(measurement),':'];
            fprintf(num2str(nargin))
            if nargin < 5
                source2 = 'CH2';
                if nargin < 4
                    source1 = 'CH1';
                end
            end
            source = [source1,', ',source2];
            sc.write([prefix,'SOUR ',source]);
            sc.write([prefix,'MAIN ',type]);
        end
        
        function m = getMeasurement(sc,measurement)
            m = sc.query(['MEAS',num2str(measurement),':RES:ACT?']);
        end
        
        
        
%         function data = waveform(ch,cha)
%             ch.scope.clear;
%             ch.scope.write('CHAN1:TYPE HRES');
%             ch.scope.write('FORM REAL');
%             ch.scope.write('FORM:BORD MSBF');
%             ch.scope.write('CHAN1:DATA:POIN DEF');
%             ch.scope.write('SING');
%             header = str2num(ch.scope.query('CHAN1:DATA:HEAD?'));
%             ch.scope.write_unsafe('CHAN1:DATA?');
%             prefixstring = fscanf(ch.scope.tcp,'%c',2);
%             prefixlength = str2double(prefixstring(2));
%             datalength = fscanf(ch.scope.tcp,'%c',prefixlength);
%             data = fread(ch.scope.tcp,header(3),'float');
%             flushinput(ch.scope.tcp);
%         end
    end
end





