Skip to content
Snippets Groups Projects
TimeHelper.cpp 1.35 KiB
Newer Older
  • Learn to ignore specific revisions
  • #include "Helpers/TimeHelper.hpp"
    
    void TimeHelper::implementCUCTimeFormat(uint32_t seconds, Message &data) {
    	// the total number of octets including the p-field (1 octet) and the 4 time units is 5
    
    	// define the P-field
    	uint8_t bit0 = 0; // P-field extension(‘zero’: no extension; ‘one’: field is extended)
    	uint8_t bits1_3 = 1; // Time code identification ( 001 -> 1958 January 1 epoch )
    	uint8_t bits4_5 = 4 - 1; // Number of octets of the basic time unit minus one
    	uint8_t bits6_7 = 0; // Number of octets of the fractional time unit
    
    	// just a reminder to be careful with the assigned values
    	assert(bit0 < 2);
    	assert(bits1_3 < 16);
    	assert(bits4_5 < 4);
    	assert(bits6_7 < 4);
    
    	/**
    	 * Define the T-field, the seconds passed from the defined epoch 1 January 1958
    	 * We use 4 octets(32 bits)for the time unit(seconds) because 32 bits for the seconds are enough
    	 * to count 136 years! But if we use 24 bits for the seconds then it will count 0,5 years and
    	 * this isn't enough. Remember we can use only integers numbers of octets for the time unit
    	 * (second)
    	 *
    	 * @todo the implementation of the total seconds depends on the structure of the RTC
    	 */
    	uint32_t totalSeconds = seconds;
    
    	// define data
    	data.appendBits(1, bit0);
    	data.appendBits(3, bits1_3);
    	data.appendBits(2, bits4_5);
    	data.appendBits(2, bits6_7);
    	data.appendWord(totalSeconds);
    }