#include "StdAfx.h"
#include "INUPacket.h"


INUPacket::INUPacket( UINT8 ID, UINT8 dataSize ) :
	  m_cnt			( 0 )
	, m_dataSize	( dataSize )
{
	m_pData = new char[ m_dataSize + HDR_SIZE + CRC_SIZE ];
	if( m_pData )
	{
		m_pData[0] = (UINT8)KEARFOTT_MAGIC;
		m_pData[1] = ID;
		m_pData[2] = dataSize;

		Spin();
	}
}


INUPacket::~INUPacket()
{
}

void INUPacket::Spin()
{
	// set packet counter
	memcpy( &m_pData[DATA_START], &m_cnt, sizeof( UINT16 ) );

	UINT8 seed = rand()%255;

	for( int i=DATA_START+2; i<DATA_START+m_dataSize; i++ ) { m_pData[i] = seed; seed++; }

	UINT8 cksum = 0;
	for( int i=POS_ID; i<m_dataSize + HDR_SIZE + CRC_SIZE - 1; i++ ) cksum ^= (UINT8)m_pData[i];
	m_pData[ m_dataSize + HDR_SIZE + CRC_SIZE - 1] = cksum;
	m_cnt++;
}

