Skip to content

Commit

Permalink
added thread safety between worker thread and tabular results generat…
Browse files Browse the repository at this point in the history
…ion.
  • Loading branch information
Marcus10110 committed May 6, 2019
1 parent db957cc commit d871b2f
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 16 deletions.
36 changes: 20 additions & 16 deletions src/AtmelSWIAnalyzerResults.cpp
Expand Up @@ -62,7 +62,11 @@ void AtmelSWIAnalyzerResults::GetTextsForPacketSegmentFrame(const Frame& f, Disp
int block_ndx(static_cast<int>(f.mData2 & 0xffffffff));
int block_offset(static_cast<int>(((f.mData2 >> 32) & 0xffffffff)));

const SWI_Block& block(mBlocks[block_ndx]);
SWI_Block block;
{
std::lock_guard<std::mutex> lock( mBlockMutex );
block = mBlocks.at( block_ndx );
}

SWI_PacketParam* param(PacketParams + f.mData1);

Expand Down Expand Up @@ -95,7 +99,7 @@ void AtmelSWIAnalyzerResults::GetTextsForPacketSegmentFrame(const Frame& f, Disp
{
AnalyzerHelpers::GetNumberString(block.Opcode, display_base, 8, number_str, BUFF_SIZE);

U8 zone = block.Data[block_offset] & 3;
U8 zone = block.Data.at(block_offset) & 3;
std::string zonestr("<unknown>");
if (zone == 0)
zonestr = "Config";
Expand All @@ -105,7 +109,7 @@ void AtmelSWIAnalyzerResults::GetTextsForPacketSegmentFrame(const Frame& f, Disp
zonestr = "Data";

const char* lenstr;
if (block.Data[block_offset] & 0x80)
if (block.Data.at(block_offset) & 0x80)
lenstr = "32 bytes";
else
lenstr = "4 bytes";
Expand All @@ -117,28 +121,28 @@ void AtmelSWIAnalyzerResults::GetTextsForPacketSegmentFrame(const Frame& f, Disp
}
break;
case PT_Byte:
AnalyzerHelpers::GetNumberString(block.Data[block_offset], display_base, 8, number_str, BUFF_SIZE);
AnalyzerHelpers::GetNumberString(block.Data.at(block_offset), display_base, 8, number_str, BUFF_SIZE);

texts.push_back(std::string(param->Name) + " (" + number_str + ")");
texts.push_back(param->Name);

break;

case PT_Status:
AnalyzerHelpers::GetNumberString(block.Data[block_offset], display_base, 8, number_str, BUFF_SIZE);
AnalyzerHelpers::GetNumberString(block.Data.at(block_offset), display_base, 8, number_str, BUFF_SIZE);

tmpstr = "<undefined>";
if (block.Data[block_offset] == 0x00)
if (block.Data.at(block_offset) == 0x00)
tmpstr = "Command executed successfully";
else if (block.Data[block_offset] == 0x01)
else if (block.Data.at(block_offset) == 0x01)
tmpstr = "Checkmac miscompare";
else if (block.Data[block_offset] == 0x03)
else if (block.Data.at(block_offset) == 0x03)
tmpstr = "Parse error";
else if (block.Data[block_offset] == 0x0F)
else if (block.Data.at(block_offset) == 0x0F)
tmpstr = "Execution error";
else if (block.Data[block_offset] == 0x11)
else if (block.Data.at(block_offset) == 0x11)
tmpstr = "Wake received properly";
else if (block.Data[block_offset] == 0xFF)
else if (block.Data.at(block_offset) == 0xFF)
tmpstr = "CRC or communication error";
else
tmpstr = "Unknown status code";
Expand All @@ -155,13 +159,13 @@ void AtmelSWIAnalyzerResults::GetTextsForPacketSegmentFrame(const Frame& f, Disp
case PT_DWord:
if (param->Type == PT_Word)
{
size_t val = (block.Data[block_offset + 1] << 8) | block.Data[block_offset];
size_t val = (block.Data.at(block_offset + 1) << 8) | block.Data.at(block_offset);
AnalyzerHelpers::GetNumberString(val, display_base, 16, number_str, BUFF_SIZE);
} else {
size_t val = (block.Data[block_offset + 3] << 24)
| (block.Data[block_offset + 2] << 16)
| (block.Data[block_offset + 1] << 8)
| block.Data[block_offset];
size_t val = (block.Data.at(block_offset + 3) << 24)
| (block.Data.at(block_offset + 2) << 16)
| (block.Data.at(block_offset + 1) << 8)
| block.Data.at(block_offset);
AnalyzerHelpers::GetNumberString(val, display_base, 32, number_str, BUFF_SIZE);
}

Expand Down
4 changes: 4 additions & 0 deletions src/AtmelSWIAnalyzerResults.h
@@ -1,6 +1,8 @@
#ifndef ATMEL_SWI_ANALYZER_RESULTS_H
#define ATMEL_SWI_ANALYZER_RESULTS_H

#include <mutex>

#include <AnalyzerResults.h>

#include "AtmelSWITypes.h"
Expand All @@ -23,6 +25,7 @@ class AtmelSWIAnalyzerResults: public AnalyzerResults

size_t AddBlock(const SWI_Block& block)
{
std::lock_guard<std::mutex> lock( mBlockMutex );
mBlocks.push_back(block);
return mBlocks.size() - 1;
}
Expand All @@ -38,6 +41,7 @@ class AtmelSWIAnalyzerResults: public AnalyzerResults
AtmelSWIAnalyzer* mAnalyzer;

std::vector<SWI_Block> mBlocks;
std::mutex mBlockMutex;
};

#endif // ATMEL_SWI_ANALYZER_RESULTS_H

0 comments on commit d871b2f

Please sign in to comment.