//========================================================================
// Summary  : Reson 6046 Utils
// Filename : Reson6046Utils.h
// Author   : Reed Christenson reed@bluefinrobotics.com
// Project  : Reson 6046 Driver
// Revision : 0.0
// Created  : 2002.04.16
// Modified : 2002.04.16
//=========================================================================
// Description : Reson 6046 Utils
//=========================================================================
// Utilities that are not desired in the AUV framework code.

#include "Reson6046Utils.h"

// WARNING!!!  This overflows around 16,843,009 unsigned chars of value 0xFF.
unsigned int Reson6046Utils::checksum8ADD(const unsigned char *buffer, 
					  unsigned int iBufferLength, bool debug)
{
     register unsigned int sum = 0;
     unsigned int count = 0;

     const unsigned char *pNext = buffer;
     const unsigned char *pEnd = buffer + iBufferLength;

     if(debug)
	 Syslog::write("checksum8ADD: buffer length = %d",iBufferLength);
 
     for(; pNext < pEnd; pNext++)
     {
        sum += ((*pNext) &  0xFF);
	if(debug)
	    Syslog::write("checksum8ADD: count = %d (0x%x)",count++,sum);
     }
     return sum;
}


// Moves value to next bigger modulus of base.
void modup(unsigned int *value, const unsigned int base)
{
    while(*value%base)
    {
	*value++;
    }
}
unsigned int modup(const unsigned int value, const unsigned int base)
{
    unsigned int val = value;
    while(val%base)
    {
	val++;
    }
    return(val);
}
