Browse Source

supports APM dataflash logs

master
George Hines 9 years ago
parent
commit
62bdcf3e9b
  1. 24
      matlab/analysis/importPX4log.m

24
matlab/analysis/importPX4log.m

@ -17,8 +17,8 @@ function allData = importPX4log(fname,keep_msgs)
BLOCK_SIZE = 8192; BLOCK_SIZE = 8192;
MSG_HEADER_LEN = 3; MSG_HEADER_LEN = 3;
% MSG_HEAD1 = uint8(hex2dec('A3')); MSG_HEAD1 = uint8(hex2dec('A3'));
% MSG_HEAD2 = uint8(hex2dec('95')); MSG_HEAD2 = uint8(hex2dec('95'));
MSG_FORMAT_PACKET_LEN = 89; MSG_FORMAT_PACKET_LEN = 89;
MSG_TYPE_FORMAT = uint8(hex2dec('80')); MSG_TYPE_FORMAT = uint8(hex2dec('80'));
% MSG_FORMAT_STRUCT = {'uint8','uint8','char4','char16','char64'}; % MSG_FORMAT_STRUCT = {'uint8','uint8','char4','char16','char64'};
@ -66,8 +66,12 @@ while 1
buffer = [buffer(ptr:end), chunk']; buffer = [buffer(ptr:end), chunk'];
ptr = 1; ptr = 1;
while numel(buffer) - ptr > MSG_HEADER_LEN while numel(buffer) - ptr > MSG_HEADER_LEN
% head1 = buffer(ptr); head1 = buffer(ptr);
% head2 = buffer(ptr+1); head2 = buffer(ptr+1);
if head1 ~= MSG_HEAD1 || head2 ~= MSG_HEAD2
ptr = ptr + 1;
continue;
end
msg_type = buffer(ptr+2); msg_type = buffer(ptr+2);
if msg_type == MSG_TYPE_FORMAT if msg_type == MSG_TYPE_FORMAT
@ -79,7 +83,7 @@ while 1
msg_descrs(msg_descr{1},:) = msg_descr; msg_descrs(msg_descr{1},:) = msg_descr;
cells = repmat({inf(1,500000)},1,numel(msg_descr{5})); cells = repmat({inf(1,500000)},1,numel(msg_descr{5}));
cells(msg_descr{4}=='n' | msg_descr{4} == 'N' | msg_descr{4} == 'Z') = {[]}; cells(msg_descr{4}=='n' | msg_descr{4} == 'N' | msg_descr{4} == 'Z') = {[]};
seed = [{'index'},{'T'},msg_descr{5};[{1},{inf(1,500000)},cells]]; seed = [{'index'},{'Tsec'},msg_descr{5};[{1},{inf(1,500000)},cells]];
allData.(msg_descr{3}) = struct(seed{:}); allData.(msg_descr{3}) = struct(seed{:});
else else
msg_descr = msg_descrs(msg_type,:); msg_descr = msg_descrs(msg_type,:);
@ -94,7 +98,9 @@ while 1
for k = 1:numel(msg_data) for k = 1:numel(msg_data)
if isnumeric(msg_data{k}) if isnumeric(msg_data{k})
allData.(msg_descr{3}).(msg_descr{5}{k})(ind) = msg_data{k}; allData.(msg_descr{3}).(msg_descr{5}{k})(ind) = msg_data{k};
try
allData.(msg_descr{3}).T(ind) = double(allData.TIME.StartTime(max(1,allData.TIME.index-1)))*1e-6; allData.(msg_descr{3}).T(ind) = double(allData.TIME.StartTime(max(1,allData.TIME.index-1)))*1e-6;
end
noInc = false; noInc = false;
else else
allData.(msg_descr{3}).(msg_descr{5}{k}) = [allData.(msg_descr{3}).(msg_descr{5}{k}), msg_data(k)]; allData.(msg_descr{3}).(msg_descr{5}{k}) = [allData.(msg_descr{3}).(msg_descr{5}{k}), msg_data(k)];
@ -128,8 +134,9 @@ end
function [ptr, msg_descr] = LOCAL_parse_message_descriptors(buffer, ptr, MSG_TYPE_FORMAT, MSG_FORMAT_PACKET_LEN, FORMAT_TO_STRUCT) function [ptr, msg_descr] = LOCAL_parse_message_descriptors(buffer, ptr, MSG_TYPE_FORMAT, MSG_FORMAT_PACKET_LEN, FORMAT_TO_STRUCT)
thisBlock = buffer((ptr+3):(ptr+MSG_FORMAT_PACKET_LEN+1)); thisBlock = buffer((ptr+3):(ptr+MSG_FORMAT_PACKET_LEN+1));
msg_descr = cell(1,7);
msg_type = thisBlock(1); msg_type = thisBlock(1);
if msg_type ~= MSG_TYPE_FORMAT %if msg_type ~= MSG_TYPE_FORMAT
msg_length = thisBlock(2); msg_length = thisBlock(2);
msg_name = LOCAL_parse_string(thisBlock(3:6)); msg_name = LOCAL_parse_string(thisBlock(3:6));
msg_format = LOCAL_parse_string(thisBlock(7:22)); msg_format = LOCAL_parse_string(thisBlock(7:22));
@ -142,8 +149,11 @@ if msg_type ~= MSG_TYPE_FORMAT
msg_struct{k} = info{1}; msg_struct{k} = info{1};
msg_mults(k) = info{2}; msg_mults(k) = info{2};
end end
msg_descr = {msg_type, msg_length, msg_name, msg_format, msg_labels, msg_struct, msg_mults}; if isempty([msg_labels{:}])
msg_labels = {'none'};
end end
msg_descr = {msg_type, msg_length, msg_name, msg_format, msg_labels, msg_struct, msg_mults};
%end
ptr = ptr + MSG_FORMAT_PACKET_LEN; ptr = ptr + MSG_FORMAT_PACKET_LEN;
end end

Loading…
Cancel
Save