コード例 #1
0
ファイル: print.hpp プロジェクト: bholt/accel-cpp
inline std::string array_str(const ArrayT& array) {
  return array_str(nullptr, array);
}
コード例 #2
0
ファイル: print.hpp プロジェクト: bholt/accel-cpp
std::ostream& operator<<(std::ostream& o, std::vector<T> v) {
  o << array_str(v);
  return o;
}
コード例 #3
0
void AtmelSWIAnalyzerResults::GetTextsForPacketSegmentFrame(const Frame& f, DisplayBase display_base, std::vector<std::string>& texts)
{
	const int BUFF_SIZE = 128;
	char number_str[BUFF_SIZE];
	std::string tmpstr;

	texts.clear();

	// get the I/O block
	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_PacketParam* param(PacketParams + f.mData1);

	switch (param->Type)
	{
	case PT_Opcode:

		AnalyzerHelpers::GetNumberString(block.Opcode, display_base, 8, number_str, BUFF_SIZE);

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

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

		break;
	case PT_RawBytes:
		{
		std::string array_str(GetByteArrayNumberStr(block.Data.begin() + block_offset, param->Length, display_base));

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

		texts.push_back(array_str);
		texts.push_back(param->Name);
		}

		break;
	case PT_Zone:
		{
		AnalyzerHelpers::GetNumberString(block.Opcode, display_base, 8, number_str, BUFF_SIZE);

		U8 zone = block.Data[block_offset] & 3;
		std::string zonestr("<unknown>");
		if (zone == 0)
			zonestr = "Config";
		else if (zone == 1)
			zonestr = "OTP";
		else if (zone == 2)
			zonestr = "Data";

		const char* lenstr;
		if (block.Data[block_offset] & 0x80)
			lenstr = "32 bytes";
		else
			lenstr = "4 bytes";

		texts.push_back("Zone " + zonestr + ", " + lenstr);

		texts.push_back(number_str);
		texts.push_back(std::string(param->Name) + " (" + number_str + ")");
		}
		break;
	case PT_Byte:
		AnalyzerHelpers::GetNumberString(block.Data[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);

		tmpstr = "<undefined>";
		if (block.Data[block_offset] == 0x00)
			tmpstr = "Command executed successfully";
		else if (block.Data[block_offset] == 0x01)
			tmpstr = "Checkmac miscompare";
		else if (block.Data[block_offset] == 0x03)
			tmpstr = "Parse error";
		else if (block.Data[block_offset] == 0x0F)
			tmpstr = "Execution error";
		else if (block.Data[block_offset] == 0x11)
			tmpstr = "Wake received properly";
		else if (block.Data[block_offset] == 0xFF)
			tmpstr = "CRC or communication error";
		else
			tmpstr = "Unknown status code";

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

		break;

	case PT_Word:
	case PT_DWord:
		if (param->Type == PT_Word)
		{
			size_t val = (block.Data[block_offset + 1] << 8)  |  block.Data[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];
			AnalyzerHelpers::GetNumberString(val, display_base, 32, number_str, BUFF_SIZE);
		}

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