% Funzione che legge i valori di calibrazione per i vari sensori

function [DCalRSNTot,DCalRSNHRTot,DCalLLTot,DCalDLTot,yesRSN,yesRSNHR,yesLL,yesDL]...
    = letturaCal(MEMS,IDcentralina,DTcatena,catena,yesRSN,yesRSNHR,yesLL,yesDL,rRSN,...
    rRSNHR,rLL,rDL,NodoRSNLink,NodoLoadLink,NodoDebrisLink,conn,FileName)

fileID = fopen(FileName,'a');
fmt = '%s \r';
text = 'letturaCal function started';
fprintf(fileID,fmt,text);

% Inizializzo le matrici
[rC,~] = size(catena);
idNodo = cell2mat(catena(:,1));

% RSN
if isempty(NodoRSNLink) == 1
    DCalRSNTot = [];
else
    if strcmp(NodoRSNLink(1,4),'ADC') || strcmp(NodoRSNLink(1,4),'null') || isempty(NodoRSNLink(1,4)) == 1
        DCalRSNTot = cell(rRSN,17);  % matrice che concatena i dati di calibrazione relativi a ciascun nodo RSN Link 
    elseif strcmp(NodoRSNLink(1,4),'Gradi')
        DCalRSNTot = [];
    end
end

% RSN HR
DCalRSNHRTot = cell(rRSNHR,6); % matrice che concatena i dati relativi a ciascun nodo RSN Link HR

% Load Link
if isempty(NodoLoadLink) == 1
    DCalLLTot = [];
else
    if strcmp(NodoLoadLink(1,4),'4-20 mA')
        DCalLLTot = cell(rLL,3); % matrice che concatena i dati relativi a ciascun nodo Load Link [4-20mA]
    elseif strcmp(NodoLoadLink(1,4),'mV/V') || strcmp(NodoLoadLink(1,4),'ADC')
        DCalLLTot = cell(rLL,2); % matrice che concatena i dati relativi a ciascun nodo Load Link [mV/V]
    end
end

% Debris LInk
if isempty(NodoDebrisLink) == 1
    DCalDLTot = [];
else
    if strcmp(NodoDebrisLink(1,4),'ADC') || strcmp(NodoDebrisLink(1,4),'null') || isempty(NodoDebrisLink(1,4)) == 1
        DCalDLTot = cell(rDL,11);  % matrice che concatena i dati di calibrazione relativi a ciascun nodo RSN Link 
    elseif strcmp(NodoRSNLink(1,4),'Gradi')
        DCalDLTot = [];
    end
end

% Matrice con testi di conferma lettura o warning di lettura per le varie tipologie di nodi
RSNL = 1;
RSNLHR = 1;
LL = 1;
DL = 1;

for a = 1:rC
    nNodo = mat2str(cell2mat(catena(a,3)));
    if idNodo(a,1) == 38 % RSN Link
        if MEMS == 2
        %% Importazione dei dati di calibrazione per RSN Link
            comando = ['select Cal0, Cal1, Cal2, Cal3, Cal4, Cal5, Cal6, Cal7, Cal8, '...
                'CalA, CalB, CalC, CalD, CalE, CalF, CalG, CalH from CalibrationView where UnitName = '''...
                IDcentralina ''' and ToolNameID = ''' DTcatena ''' and NodeNum = ''' nNodo ''''];
            curs = exec(conn,comando);
            curs = fetch(curs);
            DCalRSN = curs.Data; % matrice che raccoglie i dati del nodo numero 'a' di tipo RSN Link
            [rr,cc] = size(DCalRSN);
            if rr==1 && cc==1
                w = ['Warning: there was an error reading calibration values of RSN Link node number ' nNodo ''];
                fprintf(fileID,fmt,w);
                yesRSN = 0;
            else
                DCalRSNTot(RSNL,:) = DCalRSN(:,:);
                RSNL = RSNL+1;
                ok = ['Calibration parameters of RSN Link node number ' nNodo ' downloaded correctly'];
                fprintf(fileID,fmt,ok);
            end
        else
            ok = ['Calibration parameters of RSN Link node number ' nNodo ' NOT downloaded because the node is RSN Link 2.0 - Murata MEMS'];
            fprintf(fileID,fmt,ok);
        end
          
    elseif idNodo(a,1) == 39 % RSN Link HR
           %% Importazione dei dati di calibrazione per RSN Link HR
           comando = ['select Cal0, Cal1, Cal2, Cal3, Cal4, Cal5 from CalibrationView where UnitName = '''...
                IDcentralina ''' and ToolNameID = ''' DTcatena ''' and NodeNum = ''' nNodo ''''];
           curs = exec(conn,comando);
           curs = fetch(curs);
           DCalRSNHR = curs.Data; % matrice che raccoglie i dati del nodo numero 'a' di tipo RSN Link HR
           [rr,cc] = size(DCalRSNHR);
           if rr==1 && cc==1
              w = ['Warning: there was an error reading calibration values of RSN Link HR node number ' nNodo ''];
              fprintf(fileID,fmt,w);
              yesRSNHR = 0;
           else
                DCalRSNHRTot(RSNLHR,:) = DCalRSNHR(:,:);
                RSNLHR = RSNLHR+1;
                ok = ['Calibration parameters of RSN Link HR node number ' nNodo ' downloaded correctly'];
                fprintf(fileID,fmt,ok);
           end    
           
    elseif idNodo(a,1) == 15 % Load Link
           %% Importazione dei dati di calibrazione per Load Link 
           if strcmp(NodoLoadLink(1,4),'4-20 mA')  
              comando = ['select Cal0, Cal1, Cal2 from CalibrationView where UnitName = '''...
                    IDcentralina ''' and ToolNameID = ''' DTcatena ''' and NodeNum = ''' nNodo ''' '];
           elseif strcmp(NodoLoadLink(1,4),'mV/V')  
                  comando = ['select Cal1, Cal2 from CalibrationView where UnitName = '''...
                    IDcentralina ''' and ToolNameID = ''' DTcatena ''' and NodeNum = ''' nNodo ''' '];
           elseif strcmp(NodoLoadLink(1,4),'ADC')
               comando = ['select Cal0, Cal1 from CalibrationView where UnitName = '''...
                   IDcentralina ''' and ToolNameID = ''' DTcatena ''' and NodeNum = ''' nNodo ''' '];
           end
               curs = exec(conn,comando);
               curs = fetch(curs);
               DCalLL = curs.Data; % matrice che raccoglie i dati del nodo numero 'a' di tipo Load Link
               [rr,cc] = size(DCalLL);
               if rr==1 && cc==1
                  w = ['Warning: there was an error reading calibration values of node Load Link number ' nNodo ''];
                  fprintf(fileID,fmt,w);
                  yesLL = 0;
               else
                    DCalLLTot(LL,:) = DCalLL(:,:);
                    LL = LL+1;
                    ok = ['Calibration of node Load Link number ' nNodo ' downloaded correctly'];
                    fprintf(fileID,fmt,ok);
               end
               
    elseif idNodo(a,1) == 49 % Debris Link
        if MEMS == 2
            comando = ['select Cal0, Cal1, Cal2, Cal3, Cal4, Cal5, Cal6, Cal7, Cal8, CalA, CalB from CalibrationView where UnitName = ''' ...
                IDcentralina ''' and ToolNameID = ''' DTcatena ''' and NodeNum = ''' nNodo ''''];
            curs = exec(conn,comando);
            curs = fetch(curs);
            DCalDL = curs.Data; % matrice che raccoglie i dati del nodo numero 'a' di tipo Tunnel Link
            [rr,cc] = size(DCalDL);
            if rr==1 && cc==1
                text = ['Warning: there was an error reading Debris Link node number ' nNodo ''];
                fprintf(fileID,fmt,text);
                yesDL = 0;
            else
                DCalDLTot(DL,:) = DCalDL(:,:);
                DL = DL+1;
                text = ['Calibration of Debris Link node number ' nNodo ' downloaded correctly'];
                fprintf(fileID,fmt,text);
            end
        else
            ok = ['Calibration parameters of Debris Link node number ' nNodo ' NOT downloaded because the node is Murata MEMS'];
            fprintf(fileID,fmt,ok);
        end
        
    end
end

text = 'NuovaConversione function started';
fprintf(fileID,fmt,text);

% Nuova conversione da fare per il nuovo database
[DCalRSNTot,DCalRSNHRTot,DCalLLTot,DCalDLTot] = NuovaConversione(DCalRSNTot,...
    DCalRSNHRTot,DCalLLTot,DCalDLTot);

text = 'NuovaConversione & letturaCal functions ended';
fprintf(fileID,fmt,text);
fclose(fileID);

end