% Read ISHNE ecgSig file : 
%  function mat=read_ishne(fileName, startOffset, length);    
% Input--------------------------------------------------------       
%  fileName : the ishne filename including the path
%  startOffset: the start offset to read ecgSig
%  length:      length of ecgSig to read
% Ouput--------------------------------------------------------
%  ecgSig : ECG signal
%
function [ishneHeader, ecgSig]=read_ishne(fileName, startOffset, length);
fid=fopen(fileName,'r');
if ne(fid,-1)
    
    %Magic number
    magicNumber = fread(fid, 8, 'char');
   
    % get checksum
	checksum = fread(fid, 1, 'uint16');
	
	%read header
    Var_length_block_size = fread(fid, 1, 'long');
    ishneHeader.Sample_Size_ECG = fread(fid, 1, 'long');	
    Offset_var_lenght_block = fread(fid, 1, 'long');
    Offset_ECG_block = fread(fid, 1, 'long');
    File_Version = fread(fid, 1, 'short');
    First_Name = fread(fid, 40, 'char');  									        								
    Last_Name = fread(fid, 40, 'char');  									        								
    ID = fread(fid, 20, 'char');  									        								
    Sex = fread(fid, 1, 'short');
    Race = fread(fid, 1, 'short');
    Birth_Date = fread(fid, 3, 'short');	
    Record_Date = fread(fid, 3, 'short');	
    File_Date = fread(fid, 3, 'short');	
    Start_Time = fread(fid, 3, 'short');	
    ishneHeader.nbLeads = fread(fid, 1, 'short');
    Lead_Spec = fread(fid, 12, 'short');	
    Lead_Qual = fread(fid, 12, 'short');	
    ishneHeader.Resolution = fread(fid, 12, 'short');	
    Pacemaker = fread(fid, 1, 'short');	
    Recorder = fread(fid, 40, 'char');;
    ishneHeader.Sampling_Rate = fread(fid, 1, 'short');	
    Proprietary = fread(fid, 80, 'char');
    Copyright = fread(fid, 80, 'char');
    Reserved = fread(fid, 88, 'char');
    
    % read variable_length block
    varblock = fread(fid, Var_length_block_size, 'char');
    
    % get data at start
    offset = startOffset*ishneHeader.Sampling_Rate*ishneHeader.nbLeads*2; % each data has 2 bytes
    fseek(fid, Offset_ECG_block+offset, 'bof');
    
   
    % read ecgSig signal
    numSample = length*ishneHeader.Sampling_Rate;
    ecgSig = fread(fid, [ishneHeader.nbLeads, numSample], 'int16')';
     
    fclose(fid);
 else
     ihsneHeader = [];
     ecgSig=[];
 end