Moog Crossbow NAV440 Series User Manual

Page 112

Advertising
background image

 

 

 
 

Page 112 
 

NAV440 User Manual

7430‐0131‐01 Rev. F 

 

 

* CRC-CCITT 16-bit standard maintained by the ITU

*

(International

Telecommunications

Union).

* ARGUMENTS: queue_ptr is pointer to queue holding area to be CRCed

*

startIndex is offset into buffer where to begin CRC calculation

*

num is offset into buffer where to stop CRC calculation

* RETURNS:

2-byte CRC

*******************************************************************************/

unsigned short calcCRC(QUEUE_TYPE *queue_ptr, unsigned int startIndex, unsigned int num) {

unsigned int i=0, j=0;

unsigned short crc=0x1D0F; //non-augmented inital value equivalent to augmented initial

value 0xFFFF

for (i=0; i<num; i+=1) {

crc ^= peekByte(queue_ptr, startIndex+i) << 8;

for(j=0;j<8;j+=1)

{

if(crc & 0x8000) crc = (crc << 1) ^ 0x1021;

else crc = crc << 1;

}

}

return

crc;

}

/*******************************************************************************

* FUNCTION: Initialize - initialize the queue

* ARGUMENTS: queue_ptr is pointer to the queue

*******************************************************************************/

void Initialize(QUEUE_TYPE *queue_ptr)

{

queue_ptr->count = 0;

queue_ptr->front = 0;

queue_ptr->rear = -1;

}

/*******************************************************************************

* FUNCTION: AddQueue - add item in front of queue

* ARGUMENTS: item holds item to be added to queue

*

queue_ptr is pointer to the queue

* RETURNS:

returns 0 if queue is full. 1 if successful

*******************************************************************************/

int AddQueue(char item, QUEUE_TYPE *queue_ptr)

{

int retval = 0;

if(queue_ptr->count >= MAXQUEUE)

{

retval = 0;

/* queue is full */

}

else

{

queue_ptr->count++;

queue_ptr->rear = (queue_ptr->rear + 1) % MAXQUEUE;

queue_ptr->entry(queue_ptr->rear)

=

item;

Advertising