function  [DME_distance]= Read_DME_distance(Nav_12)
%% ---------------------------------------------------------------------------------
% Version:      02/09/2015    
% (c):          Vicente Calabuig Simón
%               vicasim@etsid.upv.es       
%
% 1.- Utilidad:
%
%       Previamente se debe haber sintonizado la frequencia de la estación DME en Nav_1 o Nav_2
%
%       Una vez sintonizada, ésta función extrae de x-plane la distancia absoluta (slant-range)
%       entre la aeronave y la estación DME sintonizada. 
%
% 2.- Parámetros de entrada:
%
%       Nav_12 : Utilizar '1' si se quiere leer la distancia a la estación DME sintonizadada en Nav_1 
%              : Utilizar '2' si se quiere leer la distancia a la estación DME sintonizadada en Nav_2
%
% 3.- Parámetros de salida:

%       DME_distance = Distancia aeronave - DME         [NM]
%
% 4.- Ejemplo de uso:
%
%       r1 = Read_DME_distance(1);
%       r2 = Read_DME_distance(2);
%
%  NOTA : X-plane debe estar ejecutándose, y debe tener configurado:  IP salida de datos     : 127.0.0.1
%                                                                     Port that we recieve on: 6500
%         
%% -------------------------------------------------------------------------------------------

% nav1 : numeracion 99      Nav 2 : numeracion 100
xp_port_out=49000;
[index,data]=UDPreceiveDATA(xp_port_out);

n=length(index);

for j = 1:n
    switch index(j)
        case 99
            DME_Nav1 = data((j-1)*8+5);
        case 100
            DME_Nav2 = data((j-1)*8+5);
    end
end

% Comprobación de la radio utilizada (Nav_1 o Nav_2)
if (Nav_12 == 1)
    DME_distance = DME_Nav1;
elseif (Nav_12 == 2)
    DME_distance = DME_Nav2;
else
    fprintf('Error. Seleccione Nav_1 o Nav_2\n');
end

end



function [index,data]=UDPreceiveDATA(port)
persistent recv_pkt;
if (isempty(recv_pkt))
    recv_pkt = java.net.DatagramPacket(uint8(zeros(1,1085)), 1085);
end
rsock = java.net.DatagramSocket(port);
rsock.receive(recv_pkt);
rsock.close();

recv_data=recv_pkt.getData();

n=recv_pkt.getLength();
i=0;
for j = 6:36:n
    i=i+1;
    index_bytes=recv_data(j:j+3);
    index(i)=typecast(index_bytes,'uint32');
    for k=1:8
        data_bytes=recv_data(j+4*k:j+4*k+3);
        data((i-1)*8+k)=typecast(data_bytes,'single');
    end
end
end























