Initial Version
This commit is contained in:
79
MATLAB/+XPlaneConnect/readUDP.m
Normal file
79
MATLAB/+XPlaneConnect/readUDP.m
Normal file
@@ -0,0 +1,79 @@
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user