80 lines
2.0 KiB
Matlab
80 lines
2.0 KiB
Matlab
function [ data ] = readUDP( input )
|
|
%readUDP Read Array from UDP Socket
|
|
% Version 0.25
|
|
%
|
|
% Inputs
|
|
% input: Either an opened UDP Socket or integer port number
|
|
%
|
|
% Outputs
|
|
% data: UDP uint8 Array. Equal to -998 in the case of an error
|
|
%
|
|
% Use
|
|
% 1. import XPlaneConnect.*;
|
|
% 2. socket = openUDP(49005);
|
|
% 3. data = readUDP(socket);
|
|
% 4. status = closeUDP(socket);
|
|
%
|
|
% or
|
|
%
|
|
% 1. import XPlaneConnect.*;
|
|
% 2. data = readUDP(49005);
|
|
%
|
|
% NOTE: sending in a port number instead of an opened socket clears the
|
|
%UDP buffer. This only works if the data is being sent at a fast rate.
|
|
%Sending in a UDP Socket reads the first packet in the buffer.
|
|
%
|
|
% Change Log
|
|
% 10/02/14: [CT] V0.25: Updated to work with updated xpcPlugin
|
|
% 04/18/14: [CT] V0.2: Added Versioning
|
|
% 09/08/13: [CT] Added option for either UDP Socket or port number input
|
|
% 06/10/13: [CT] Code created
|
|
%
|
|
% Contributors
|
|
% [CT] Christopher Teubert (SGT, Inc.)
|
|
% christopher.a.teubert@nasa.gov
|
|
%
|
|
% To Do
|
|
% 1. Verify Input
|
|
%
|
|
% BEGIN CODE
|
|
|
|
import XPlaneConnect.*
|
|
import java.net.DatagramPacket
|
|
bits = 2000;
|
|
|
|
%% Interpret Input
|
|
socket = input;
|
|
if isnumeric(input)
|
|
socket=openUDP(input);
|
|
end
|
|
|
|
%% Try reading packet
|
|
try
|
|
packet = DatagramPacket(zeros(1,bits,'int8'),bits);
|
|
socket.receive(packet)
|
|
data = packet.getData;
|
|
|
|
data = int16(data);
|
|
data(data(:)<0) = uint8(data(data(:)<0) + 256); %fix signed issue
|
|
size = int16(data(5)); %size of data stream
|
|
|
|
%% trim trailing data
|
|
for i=1:floor(length(data)/256)+1
|
|
if data(size+1:end)==0
|
|
break
|
|
end
|
|
size = size + 256;
|
|
end
|
|
data = data(1:size);
|
|
|
|
catch err %Read Unsuccessful
|
|
data = -998;
|
|
end
|
|
|
|
%% Close Port (if opened in code)
|
|
if isnumeric(input)
|
|
socket.close()
|
|
end
|
|
end
|
|
|