dRonin  adbada4
dRonin GCS
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Groups Pages
uavobjecttemplate.m File Reference

Go to the source code of this file.

Functions

 fprintf ('\n\n ***dRonin log parser ***\n\n')
 
else error ('Your technical computing program does not support file choosers.Please input the file name in the argument. ') end elseif nargin >0 logfile
 
if nargin && strcmp (class(varargin{2}),'char')
 
elseif nargin && strcmp (class(varargin{2}),'logical')
 
end end if ~strcmpi (outputType,'mat')&&~strcmpi(outputType
 
end end if csv error ('Incorrect file format specified.Second argument must be ''mat''or ''csv''.')
 
 end (INSTANTIATIONCODE) fid
 
 fgetl (fid)
 
Read third line if strcmp (gitLogfileHash, uavoImporterHash)
 
end if strcmp (uavoLogfileHash, UAVO_HASH)
 
 fprintf ([str1 str2 str3 str4 str5])
 
end for as it was simply a
dummy placeholder 
disp (['Unknown object ID:0x'dec2hex(unknownObjIDList(i, 1), 8) 'appeared 'int2str(unknownObjIDList(i, 2)) 'times.'])
 
end Clean Up and Save mat file fclose (fid)
 
Prune vectors (CLEANUPCODE)%%Perform typecasting on vectors $(ALLOCATIONCODE)%%Save data to file if strcmpi(outputType
 
 save (matfile $(SAVEOBJECTSCODE))
 
 else (EXPORTCSVCODE) end fprintf('%d records in%0.2f seconds.\n'
 
 etime (clock, startTime))
 
function OPLog2csv (structIn, structName, logfile)%Get each field name from the structure fieldNames
 
if isempty (structIn.(fieldNames{1}))
 
Write to csv dlmwrite (csvfile, headerOut, '')
 
 dlmwrite (csvfile, matOut, '-append')
 
'Inputs must be vectors, i.e
just one column wide.' 
inStart ()
 

Variables

 function []
 
 UAVO_HASH = '${UAVOSHA1TXT}'
 
 outputType ='mat'
 
Default output is a mat file checkCRC = false
 
 wrongSyncByte =0
 
 wrongMessageByte =0
 
 lastWrongSyncByte =0
 
 lastWrongMessageByte =0
 
 str1 =[]
 
 str2 =[]
 
 str3 =[]
 
 str4 =[]
 
 str5 =[]
 
 multipleInstanceLookup = zeros(0,2)
 
 overo = false
 
global crc_table
 
if nargin
 
 logfile =fullfile(PathName, FileName)
 
Read first line gitLogfileHash = fgetl(fid)
 
Read second line uavoLogfileHash = fgetl(fid)
 
end buffer =fread(fid,Inf,'uchar=>uchar')
 
 bufferIdx =1
 
 correctMsgByte =hex2dec('20')
 
 correctSyncByte =hex2dec('3C')
 
 unknownObjIDList =zeros(1,2)
 
Parse log file
 
Parse log entry by entry prebuf = buffer(1:12)
 
 last_print = -1e10
 
 startTime =clock
 
if overo instanceIdOffset = -2
 
 timestampWraparound = 2^16
 
end timestampAccumulator = 0
 
 lastTimestamp = 0
 
 buffer_len = length(buffer)
 
while bufferIdx< (buffer_len-20)%%Read
message header%get sync field(0x3C, 1 byte) if~overo sync=buffer(bufferIdx+12);else sync=buffer(bufferIdx);end if sync~=correctSyncByte bufferIdx=bufferIdx+1;if~overo||sync~=255 wrongSyncByte=wrongSyncByte+1;end continue end if~overo%For GCS logging the format is as follows%4 bytes timestamp(milliseconds)%8 bytes data size%UAVTalk packet(always without timestamped packets)%Sync val(0x3c)%Message type(1 byte)%Length(2 bytes)%Object ID(4 bytes)%Instance ID(optional, 2 bytes)%Data(variable length)%Checksum(1 byte)%Process header, if we are aligned datasizeBufferIdx=bufferIdx;%Just grab the index.We'll do a typecast later, if necessary datasizeLength=4;msgType=buffer(bufferIdx+13);%get msg type(quint8 1 byte) should be 0x20, ignore the rest?objID=typecast(buffer(bufferIdx+16:bufferIdx+16+4-1), 'uint32');%get obj id(quint32 4 bytes) timestamp=double(typecast(buffer(bufferIdx:bufferIdx+4-1),'uint32'));%Advance buffer past header to where data is(or instance ID) bufferIdx=bufferIdx+20;else%For Overo logging the format is%UAVTalk packet(with timestamped packet)%Sync val(0x3c)%Message type(1 byte, adds 0x80)%Length(2 bytes)%Object ID(4 bytes)%Instance ID(optional, 2 bytes)%Timestamp(2 bytes)%Data(variable length)%Checksum(1 byte)%Process header for overo datasizeBufferIdx=bufferIdx+2;datasizeLength=2;msgType=buffer(bufferIdx+1)-128;objID=typecast(buffer(bufferIdx+4:bufferIdx+4+4-1), 'uint32');singleInstance=multipleInstanceLookup(multipleInstanceLookup(:, 1)==objID, 2);if singleInstance timestamp=double(typecast(buffer(bufferIdx+8:bufferIdx+10-1),'uint16'));else timestamp=double(typecast(buffer(bufferIdx+12:bufferIdx+14-1),'uint16'));end%Advance buffer past header to where data is.In the case of a%multiple instance object this will be where the timstamp is but%the parsing code will advance by two more.bufferIdx=bufferIdx+10;end if timestamp< lastTimestamp timestampAccumulator=timestampAccumulator+timestampWraparound;end lastTimestamp=timestamp;timestamp=timestamp+timestampAccumulator;%Check that message type is correct if msgType~=correctMsgByte wrongMessageByte=wrongMessageByte+1;continue end if(isempty(objID))%End of file break;end%%Read object try switch objID $(SWITCHCODE) otherwise unknownObjIDListIdx=find(unknownObjIDList(:, 1)==objID, 1, 'first');if isempty(unknownObjIDListIdx) unknownObjIDList=[unknownObjIDList;uint32(objID) 1];%#ok< AGROW > else unknownObjIDList(unknownObjIDListIdx, 2)=unknownObjIDList(unknownObjIDListIdx, 2)+1;end datasize=typecast(buffer(datasizeBufferIdx+4:datasizeBufferIdx+12-1), 'uint64');msgBytesLeft=datasize-1-1-2-4;if msgBytesLeft > 255 msgBytesLeft=0;end bufferIdx=bufferIdx+double(msgBytesLeft);end catch%One of the reads failed-indicates EOF break;end if(wrongSyncByte~=lastWrongSyncByte||wrongMessageByte~=lastWrongMessageByte)||...bufferIdx-last_print > 
Every
 
for i =1:length([str2 str3 str4 str5])
 
Arbitrary times two so that it
is at least as long 
estTimeRemaining =(buffer_len-bufferIdx)/(bufferIdx/etime(clock,startTime)) * 2
 
 h =floor(estTimeRemaining/3600)
 
 m =floor((estTimeRemaining-h*3600)/60)
 
 s =ceil(estTimeRemaining-h*3600-m*60)
 
end Check if at end of file If not
 
Prune mat [path, name] =fileparts(logfile)
 
 matfile = fullfile(path,[name '.mat'])
 
Create a text string with the
field names 
headerOut =sprintf('%s,',fieldNames{:})
 
Trim off last
 
Trim off and t Assign the
structure arrays to a matrix 
matOut =zeros(max(size(structIn.(fieldNames{1}))), length(fieldNames))
 
end end Create filename by
replacing opl by 
csv [path, name] = fileparts(logfile)
 
 csvDirName =[name '_csv']
 
Dummy outputs so the program
doens t throw warnings about
Directory already exists 
csvfile =fullfile(path, csvDirName , [name '.csv'])
 
function crc
 
end function out
 
end function found on Matlab s
file exchange The two
functions return identical 
results
 
end function found on Matlab s
file exchange The two
functions return identical
although his is much faster 
Unfortunately
 
 inFinish =inFinish'
 
end end diffIn =diff([inStart; inFinish])
 
 numElements =sum(diffIn)+length(inStart)
 
 idx =1
 

Function Documentation

end for as it was simply a dummy placeholder disp ( )
Write to csv dlmwrite ( csvfile  ,
headerOut  ,
''   
)
dlmwrite ( csvfile  ,
matOut  ,
'-append'   
)
else ( EXPORTCSVCODE  )
end ( INSTANTIATIONCODE  )
else error ( 'Your technical computing program does not support file choosers.Please input the file name in the argument. '  )
end end if csv error ( 'Incorrect file format specified.Second argument must be ''mat''or ''csv''.'  )
etime ( clock  ,
startTime   
)
end Clean Up and Save mat file fclose ( fid  )
fgetl ( fid  )
fprintf ( '\n\n ***dRonin log parser ***\n\n )
fprintf ( )
'Inputs must be vectors, i.e just one column wide.' inStart ( )
virtual
if isempty ( structIn.  fieldNames{1})
function OPLog2csv ( structIn  ,
structName  ,
logfile   
)
save ( matfile SAVEOBJECTSCODE)
if nargin&& strcmp ( class(varargin{2})  ,
'char'   
)
elseif nargin&& strcmp ( class(varargin{2})  ,
'logical'   
)
Read third line if strcmp ( gitLogfileHash  ,
uavoImporterHash   
)
end if strcmp ( uavoLogfileHash  ,
UAVO_HASH   
)
Prune vectors ( CLEANUPCODE  )
end end if ~strcmpi ( outputType  ,
'mat  
)

Variable Documentation

end buffer =fread(fid,Inf,'uchar=>uchar')

Definition at line 98 of file uavobjecttemplate.m.

buffer_len = length(buffer)

Definition at line 125 of file uavobjecttemplate.m.

end bufferIdx =1

Definition at line 101 of file uavobjecttemplate.m.

Default output is a mat file checkCRC = false

Definition at line 22 of file uavobjecttemplate.m.

correctMsgByte =hex2dec('20')

Definition at line 103 of file uavobjecttemplate.m.

correctSyncByte =hex2dec('3C')

Definition at line 104 of file uavobjecttemplate.m.

crc
Initial value:
= compute_crc(data)
global crc_table
global crc_table
DataFields data

Definition at line 332 of file uavobjecttemplate.m.

crc_table
Initial value:
= [ ...
hex2dec('00'),hex2dec('07'),hex2dec('0e'),hex2dec('09'),hex2dec('1c'),hex2dec('1b'),hex2dec('12'),hex2dec('15'),hex2dec('38'),hex2dec('3f'),hex2dec('36'),hex2dec('31'),hex2dec('24'),hex2dec('23'),hex2dec('2a'),hex2dec('2d'), ...
hex2dec('70'),hex2dec('77'),hex2dec('7e'),hex2dec('79'),hex2dec('6c'),hex2dec('6b'),hex2dec('62'),hex2dec('65'),hex2dec('48'),hex2dec('4f'),hex2dec('46'),hex2dec('41'),hex2dec('54'),hex2dec('53'),hex2dec('5a'),hex2dec('5d'), ...
hex2dec('e0'),hex2dec('e7'),hex2dec('ee'),hex2dec('e9'),hex2dec('fc'),hex2dec('fb'),hex2dec('f2'),hex2dec('f5'),hex2dec('d8'),hex2dec('df'),hex2dec('d6'),hex2dec('d1'),hex2dec('c4'),hex2dec('c3'),hex2dec('ca'),hex2dec('cd'), ...
hex2dec('90'),hex2dec('97'),hex2dec('9e'),hex2dec('99'),hex2dec('8c'),hex2dec('8b'),hex2dec('82'),hex2dec('85'),hex2dec('a8'),hex2dec('af'),hex2dec('a6'),hex2dec('a1'),hex2dec('b4'),hex2dec('b3'),hex2dec('ba'),hex2dec('bd'), ...
hex2dec('c7'),hex2dec('c0'),hex2dec('c9'),hex2dec('ce'),hex2dec('db'),hex2dec('dc'),hex2dec('d5'),hex2dec('d2'),hex2dec('ff'),hex2dec('f8'),hex2dec('f1'),hex2dec('f6'),hex2dec('e3'),hex2dec('e4'),hex2dec('ed'),hex2dec('ea'), ...
hex2dec('b7'),hex2dec('b0'),hex2dec('b9'),hex2dec('be'),hex2dec('ab'),hex2dec('ac'),hex2dec('a5'),hex2dec('a2'),hex2dec('8f'),hex2dec('88'),hex2dec('81'),hex2dec('86'),hex2dec('93'),hex2dec('94'),hex2dec('9d'),hex2dec('9a'), ...
hex2dec('27'),hex2dec('20'),hex2dec('29'),hex2dec('2e'),hex2dec('3b'),hex2dec('3c'),hex2dec('35'),hex2dec('32'),hex2dec('1f'),hex2dec('18'),hex2dec('11'),hex2dec('16'),hex2dec('03'),hex2dec('04'),hex2dec('0d'),hex2dec('0a'), ...
hex2dec('57'),hex2dec('50'),hex2dec('59'),hex2dec('5e'),hex2dec('4b'),hex2dec('4c'),hex2dec('45'),hex2dec('42'),hex2dec('6f'),hex2dec('68'),hex2dec('61'),hex2dec('66'),hex2dec('73'),hex2dec('74'),hex2dec('7d'),hex2dec('7a'), ...
hex2dec('89'),hex2dec('8e'),hex2dec('87'),hex2dec('80'),hex2dec('95'),hex2dec('92'),hex2dec('9b'),hex2dec('9c'),hex2dec('b1'),hex2dec('b6'),hex2dec('bf'),hex2dec('b8'),hex2dec('ad'),hex2dec('aa'),hex2dec('a3'),hex2dec('a4'), ...
hex2dec('f9'),hex2dec('fe'),hex2dec('f7'),hex2dec('f0'),hex2dec('e5'),hex2dec('e2'),hex2dec('eb'),hex2dec('ec'),hex2dec('c1'),hex2dec('c6'),hex2dec('cf'),hex2dec('c8'),hex2dec('dd'),hex2dec('da'),hex2dec('d3'),hex2dec('d4'), ...
hex2dec('69'),hex2dec('6e'),hex2dec('67'),hex2dec('60'),hex2dec('75'),hex2dec('72'),hex2dec('7b'),hex2dec('7c'),hex2dec('51'),hex2dec('56'),hex2dec('5f'),hex2dec('58'),hex2dec('4d'),hex2dec('4a'),hex2dec('43'),hex2dec('44'), ...
hex2dec('19'),hex2dec('1e'),hex2dec('17'),hex2dec('10'),hex2dec('05'),hex2dec('02'),hex2dec('0b'),hex2dec('0c'),hex2dec('21'),hex2dec('26'),hex2dec('2f'),hex2dec('28'),hex2dec('3d'),hex2dec('3a'),hex2dec('33'),hex2dec('34'), ...
hex2dec('4e'),hex2dec('49'),hex2dec('40'),hex2dec('47'),hex2dec('52'),hex2dec('55'),hex2dec('5c'),hex2dec('5b'),hex2dec('76'),hex2dec('71'),hex2dec('78'),hex2dec('7f'),hex2dec('6a'),hex2dec('6d'),hex2dec('64'),hex2dec('63'), ...
hex2dec('3e'),hex2dec('39'),hex2dec('30'),hex2dec('37'),hex2dec('22'),hex2dec('25'),hex2dec('2c'),hex2dec('2b'),hex2dec('06'),hex2dec('01'),hex2dec('08'),hex2dec('0f'),hex2dec('1a'),hex2dec('1d'),hex2dec('14'),hex2dec('13'), ...
hex2dec('ae'),hex2dec('a9'),hex2dec('a0'),hex2dec('a7'),hex2dec('b2'),hex2dec('b5'),hex2dec('bc'),hex2dec('bb'),hex2dec('96'),hex2dec('91'),hex2dec('98'),hex2dec('9f'),hex2dec('8a'),hex2dec('8d'),hex2dec('84'),hex2dec('83'), ...
hex2dec('de'),hex2dec('d9'),hex2dec('d0'),hex2dec('d7'),hex2dec('c2'),hex2dec('c5'),hex2dec('cc'),hex2dec('cb'),hex2dec('e6'),hex2dec('e1'),hex2dec('e8'),hex2dec('ef'),hex2dec('fa'),hex2dec('fd'),hex2dec('f4'),hex2dec('f3') ...
]

Definition at line 36 of file uavobjecttemplate.m.

end end Create filename by replacing opl by csv[path, name] = fileparts(logfile)

Definition at line 323 of file uavobjecttemplate.m.

csvDirName =[name '_csv']

Definition at line 324 of file uavobjecttemplate.m.

Dummy outputs so the program doens t throw warnings about Directory already exists csvfile =fullfile(path, csvDirName , [name '.csv'])

Definition at line 326 of file uavobjecttemplate.m.

end end diffIn =diff([inStart; inFinish])

Definition at line 354 of file uavobjecttemplate.m.

Arbitrary times two so that it is at least as long estTimeRemaining =(buffer_len-bufferIdx)/(bufferIdx/etime(clock,startTime)) * 2

Definition at line 255 of file uavobjecttemplate.m.

while bufferIdx< (buffer_len - 20) %% Read message header % get sync field (0x3C, 1 byte) if ~overo sync = buffer(bufferIdx+12); else sync = buffer(bufferIdx); end if sync ~= correctSyncByte bufferIdx=bufferIdx+1; if ~overo || sync ~= 255 wrongSyncByte = wrongSyncByte + 1; end continue end if ~overo % For GCS logging the format is as follows % 4 bytes timestamp (milliseconds) % 8 bytes data size % UAVTalk packet (always without timestamped packets) % Sync val (0x3c) % Message type (1 byte) % Length (2 bytes) % Object ID (4 bytes) % Instance ID (optional, 2 bytes) % Data (variable length) % Checksum (1 byte) % Process header, if we are aligned datasizeBufferIdx = bufferIdx; %Just grab the index. We'll do a typecast later, if necessary datasizeLength = 4; msgType = buffer(bufferIdx+13); % get msg type (quint8 1 byte ) should be 0x20, ignore the rest? objID = typecast(buffer(bufferIdx+16:bufferIdx+ 16+4-1), 'uint32'); % get obj id (quint32 4 bytes) timestamp = double(typecast(buffer(bufferIdx:bufferIdx+4-1),'uint32')); % Advance buffer past header to where data is (or instance ID) bufferIdx=bufferIdx + 20; else % For Overo logging the format is % UAVTalk packet (with timestamped packet) % Sync val (0x3c) % Message type (1 byte, adds 0x80) % Length (2 bytes) % Object ID (4 bytes) % Instance ID (optional, 2 bytes) % Timestamp (2 bytes) % Data (variable length) % Checksum (1 byte) % Process header for overo datasizeBufferIdx = bufferIdx + 2; datasizeLength = 2; msgType = buffer(bufferIdx+1) - 128; objID = typecast(buffer(bufferIdx+4:bufferIdx+ 4+4-1), 'uint32'); singleInstance = multipleInstanceLookup(multipleInstanceLookup(:,1) == objID, 2); if singleInstance timestamp = double(typecast(buffer(bufferIdx+8:bufferIdx+10-1),'uint16')); else timestamp = double(typecast(buffer(bufferIdx+12:bufferIdx+14-1),'uint16')); end % Advance buffer past header to where data is. In the case of a % multiple instance object this will be where the timstamp is but % the parsing code will advance by two more. bufferIdx = bufferIdx + 10; end if timestamp < lastTimestamp timestampAccumulator = timestampAccumulator + timestampWraparound; end lastTimestamp = timestamp; timestamp = timestamp + timestampAccumulator; %Check that message type is correct if msgType ~= correctMsgByte wrongMessageByte = wrongMessageByte + 1; continue end if (isempty(objID)) %End of file break; end %% Read object try switch objID$(SWITCHCODE) otherwise unknownObjIDListIdx=find(unknownObjIDList(:,1)==objID, 1, 'first'); if isempty(unknownObjIDListIdx) unknownObjIDList=[unknownObjIDList; uint32(objID) 1]; %#ok<AGROW> else unknownObjIDList(unknownObjIDListIdx,2)=unknownObjIDList(unknownObjIDListIdx,2)+1; end datasize = typecast(buffer(datasizeBufferIdx + 4:datasizeBufferIdx + 12-1), 'uint64'); msgBytesLeft = datasize - 1 - 1 - 2 - 4; if msgBytesLeft > 255 msgBytesLeft = 0; end bufferIdx=bufferIdx+double(msgBytesLeft); end catch % One of the reads failed - indicates EOF break; end if (wrongSyncByte ~= lastWrongSyncByte || wrongMessageByte~=lastWrongMessageByte ) ||... bufferIdx - last_print > Every

Definition at line 240 of file uavobjecttemplate.m.

Parse log file

Definition at line 107 of file uavobjecttemplate.m.

function[]
Initial value:
= LogConvert(varargin)
% Convert log files into matlab structures
%
% If called with no arguements this function will present a
% file chooser. If called with a string arguement it will
% process that file name.
%
% To process Overo files call with
% LogConvert(path_to_file, true)
%
% Tau Labs (C) 2012-2013
% dRonin (C) 2016
%% Define indices and arrays of structures to hold data
% THIS FILE IS AUTOMATICALLY GENERATED.
% dRonin git branch:
uavoImporterHash= '${TAG_OR_BRANCH}:${HASH8}${DIRTY} ${DATETIME}'
DataFields data
end a
Definition: OPPlots.m:98
Parse log file

Definition at line 1 of file uavobjecttemplate.m.

Read first line gitLogfileHash = fgetl(fid)

Definition at line 84 of file uavobjecttemplate.m.

h =floor(estTimeRemaining/3600)

Definition at line 256 of file uavobjecttemplate.m.

headerOut =sprintf('%s,',fieldNames{:})

Definition at line 309 of file uavobjecttemplate.m.

for i =1:length([str2 str3 str4 str5])

Definition at line 246 of file uavobjecttemplate.m.

idx =1

Definition at line 359 of file uavobjecttemplate.m.

inFinish =inFinish'

Definition at line 350 of file uavobjecttemplate.m.

else instanceIdOffset = -2

Definition at line 115 of file uavobjecttemplate.m.

Trim off last

Definition at line 310 of file uavobjecttemplate.m.

last_print = -1e10

Definition at line 110 of file uavobjecttemplate.m.

lastTimestamp = 0

Definition at line 123 of file uavobjecttemplate.m.

lastWrongMessageByte =0

Definition at line 26 of file uavobjecttemplate.m.

while bufferIdx< (buffer_len-20)%%Read message header%get sync field(0x3C, 1 byte) if~overo sync=buffer(bufferIdx+12) else sync=buffer(bufferIdx) end if sync~=correctSyncByte bufferIdx=bufferIdx+1 if~overo||sync~=255 wrongSyncByte=wrongSyncByte+1 end continue end if~overo%For GCS logging the format is as follows%4 bytes timestamp(milliseconds)%8 bytes data size%UAVTalk packet(always without timestamped packets)%Sync val(0x3c)%Message type(1 byte)%Length(2 bytes)%Object ID(4 bytes)%Instance ID(optional, 2 bytes)%Data(variable length)%Checksum(1 byte)%Process header, if we are aligned datasizeBufferIdx=bufferIdx%Just grab the index.We'll do a typecast later, if necessary datasizeLength=4 msgType=buffer(bufferIdx+13)%get msg type(quint8 1 byte) should be 0x20, ignore the rest?objID=typecast(buffer(bufferIdx+16:bufferIdx+16+4-1), 'uint32')%get obj id(quint32 4 bytes) timestamp=double(typecast(buffer(bufferIdx:bufferIdx+4-1),'uint32'))%Advance buffer past header to where data is(or instance ID) bufferIdx=bufferIdx+20 else%For Overo logging the format is%UAVTalk packet(with timestamped packet)%Sync val(0x3c)%Message type(1 byte, adds 0x80)%Length(2 bytes)%Object ID(4 bytes)%Instance ID(optional, 2 bytes)%Timestamp(2 bytes)%Data(variable length)%Checksum(1 byte)%Process header for overo datasizeBufferIdx=bufferIdx+2 datasizeLength=2 msgType=buffer(bufferIdx+1)-128 objID=typecast(buffer(bufferIdx+4:bufferIdx+4+4-1), 'uint32') singleInstance=multipleInstanceLookup(multipleInstanceLookup(:, 1)==objID, 2) if singleInstance timestamp=double(typecast(buffer(bufferIdx+8:bufferIdx+10-1),'uint16')) else timestamp=double(typecast(buffer(bufferIdx+12:bufferIdx+14-1),'uint16')) end%Advance buffer past header to where data is.In the case of a%multiple instance object this will be where the timstamp is but%the parsing code will advance by two more.bufferIdx=bufferIdx+10 end if timestamp< lastTimestamp timestampAccumulator=timestampAccumulator+timestampWraparound end lastTimestamp=timestamp timestamp=timestamp+timestampAccumulator%Check that message type is correct if msgType~=correctMsgByte wrongMessageByte=wrongMessageByte+1 continue end if(isempty(objID))%End of file break end%%Read object try switch objID $(SWITCHCODE) otherwise unknownObjIDListIdx=find(unknownObjIDList(:, 1)==objID, 1, 'first') if isempty(unknownObjIDListIdx) unknownObjIDList=[unknownObjIDList uint32(objID) 1]%#ok< AGROW > else unknownObjIDList(unknownObjIDListIdx, 2)=unknownObjIDList(unknownObjIDListIdx, 2)+1 end datasize=typecast(buffer(datasizeBufferIdx+4:datasizeBufferIdx+12-1), 'uint64') msgBytesLeft=datasize-1-1-2-4 if msgBytesLeft > 255 msgBytesLeft=0 end bufferIdx=bufferIdx+double(msgBytesLeft) end catch%One of the reads failed-indicates EOF break end if(wrongSyncByte~=lastWrongSyncByte||wrongMessageByte~=lastWrongMessageByte)||...bufferIdx-last_print > bytes show the status update lastWrongSyncByte =0

Definition at line 25 of file uavobjecttemplate.m.

logfile =fullfile(PathName, FileName)

Definition at line 60 of file uavobjecttemplate.m.

m =floor((estTimeRemaining-h*3600)/60)

Definition at line 257 of file uavobjecttemplate.m.

Prune mat[path, name] =fileparts(logfile)

Definition at line 292 of file uavobjecttemplate.m.

matfile = fullfile(path,[name '.mat'])

Definition at line 293 of file uavobjecttemplate.m.

matOut =zeros(max(size(structIn.(fieldNames{1}))), length(fieldNames))

Definition at line 313 of file uavobjecttemplate.m.

multipleInstanceLookup = zeros(0,2)

Definition at line 32 of file uavobjecttemplate.m.

if nargin
Initial value:
==0
%%
if (exist('uigetfile')) %#ok<EXIST>
[FileName, PathName]=uigetfile({'*.drlog;*.tll','dRonin Log Files (*.drlog, *.tll)'})

Definition at line 56 of file uavobjecttemplate.m.

end Check if at end of file If not

Definition at line 267 of file uavobjecttemplate.m.

numElements =sum(diffIn)+length(inStart)

Definition at line 355 of file uavobjecttemplate.m.

out
Initial value:
=mcolon(inStart, inFinish)
%% This function was inspired by Bruno Luong's 'mcolon'. The name is kept the same as his 'mcolon'
% function
'Inputs must be vectors, i.e just one column wide.' inStart()

Definition at line 339 of file uavobjecttemplate.m.

outputType ='mat'

Definition at line 21 of file uavobjecttemplate.m.

overo = false

Definition at line 33 of file uavobjecttemplate.m.

Parse log entry by entry prebuf = buffer(1:12)

Definition at line 108 of file uavobjecttemplate.m.

end function found on Matlab s file exchange The two functions return identical results

Definition at line 339 of file uavobjecttemplate.m.

s =ceil(estTimeRemaining-h*3600-m*60)

Definition at line 258 of file uavobjecttemplate.m.

startTime =clock

Definition at line 112 of file uavobjecttemplate.m.

str1 =[]

Definition at line 27 of file uavobjecttemplate.m.

end str2 =[]

Definition at line 28 of file uavobjecttemplate.m.

str3 =[]

Definition at line 29 of file uavobjecttemplate.m.

str4 =[]

Definition at line 30 of file uavobjecttemplate.m.

str5 =[]

Definition at line 31 of file uavobjecttemplate.m.

end timestampAccumulator = 0

Definition at line 122 of file uavobjecttemplate.m.

timestampWraparound = 2^16

Definition at line 116 of file uavobjecttemplate.m.

UAVO_HASH = '${UAVOSHA1TXT}'

Definition at line 19 of file uavobjecttemplate.m.

Read second line uavoLogfileHash = fgetl(fid)

Definition at line 85 of file uavobjecttemplate.m.

end function found on Matlab s file exchange The two functions return identical although his is much faster Unfortunately

Definition at line 339 of file uavobjecttemplate.m.

unknownObjIDList =zeros(1,2)

Definition at line 105 of file uavobjecttemplate.m.

wrongMessageByte =0

Definition at line 24 of file uavobjecttemplate.m.

wrongSyncByte =0

Definition at line 23 of file uavobjecttemplate.m.