#include "ccsds.h" ccsds::ccsds(unsigned char data_field_header, unsigned char processID, unsigned int sequence_count, unsigned int packet_length, unsigned char acceptance, unsigned int completion, unsigned char service_type, unsigned char service_subtype, unsigned char sourceID) { unsigned int packetID = 0; ccsds_header = new ccsds_telecommand_source_packet_hdr_t ; packetID = packetID + (0b000<<13); // version number packetID = packetID + (0b1<<12); // packet type packetID = packetID + (data_field_header<<11); // data field header 1 if there is a datafield header packetID = packetID + (processID<<4); // process ID 7 bits packetID = packetID + (0b1100); // packet category '1100' ccsds_header->packetId1 = (unsigned char) (packetID>>8); ccsds_header->packetId0 = (unsigned char) (packetID); ccsds_header->packetSequenceControl1 = (unsigned char) ((0b11<<6) + (sequence_count>>8)); ccsds_header->packetSequenceControl0 = (unsigned char) (sequence_count); ccsds_header->packetLength1 = (unsigned char) (packet_length>>8); ccsds_header->packetLength0 = (unsigned char) (packet_length); ccsds_header->dataFieldHeader3 = ccsds_header->dataFieldHeader3 + (0b0001<<4); ccsds_header->dataFieldHeader3 = ccsds_header->dataFieldHeader3 + (completion<<3); ccsds_header->dataFieldHeader3 = ccsds_header->dataFieldHeader3 + (acceptance); ccsds_header->dataFieldHeader2 = service_type; ccsds_header->dataFieldHeader1 = service_subtype; ccsds_header->dataFieldHeader0 = sourceID; }