Skip to content
Snippets Groups Projects
Astri_Horn_Generic.cpp 1.7 KiB
Newer Older
/*
 * AstriPacketGeneric.cpp
 *
 *  Created on: Jan 26, 2023
 *      Author: valerio
 */

astri's avatar
astri committed
#include <Astri_Horn_Generic.h>
#include <Astri_Horn_Recognized_Packet.h>

using namespace inaf::oasbo::Packets;

uint AstriHornGeneric::getHeaderSize() const {
	return 6;
}

uint AstriHornGeneric::getPayloadSize() const {
	auto val = this->operator [](5);
	if(val.has_value())
Valerio Pastore's avatar
Valerio Pastore committed
		return val.value()+1;
	else{
		std::cerr << "Error: cannot access index 5 to get payload size." <<  std::endl;
		exit(EXIT_FAILURE);
	}
}

uint AstriHornGeneric::getTailSize() const {
Valerio Pastore's avatar
Valerio Pastore committed
	return 0;
}

bool AstriHornGeneric::isRecognizedHeader() const {
	size_t type = this->operator []("type").value();
	size_t subtype = this->operator []("subtype").value();
	ssize_t length = this->operator []("length").value();
	ssize_t totLength = this->getHeaderSize() + length-1 + this->getTailSize();
	std::tuple<size_t, size_t, size_t> target = std::make_tuple(type, subtype,totLength);
	auto it = std::find(AstriHorn::recognizedPackets.begin(),
			AstriHorn::recognizedPackets.end(), target);
	if (it != AstriHorn::recognizedPackets.end())
		return true;
	else
		return false;
}


bool AstriHornGeneric::isRecognizedHeader(std::vector<uint8_t> buff) const {
	if( buff.size() != this->getHeaderSize())
		return false;

	size_t type = buff[1] >> 4;
	size_t subtype = buff[1] & 0x0F;
Valerio Pastore's avatar
Valerio Pastore committed
	ssize_t length = (buff[4] << 8) + buff[5];
	ssize_t totLength = this->getHeaderSize() + length+1 + this->getTailSize();
	std::tuple<size_t, size_t, size_t> target = std::make_tuple(type, subtype,totLength);
	auto it = std::find(AstriHorn::recognizedPackets.begin(),
			AstriHorn::recognizedPackets.end(), target);
	if (it != AstriHorn::recognizedPackets.end())
		return true;
	else
		return false;
}