
#ifndef _UTIL_H_
#define _UTIL_H_
/********************************************************************
 * Workfile   : util.h
 * Project    : Kraken
 * Author     : khwoo
 * Description: Commands Template
 *
 *                                 Copyright (c) 2009 HUMAX Co., Ltd.
 *                                               All rights reserved.
 ********************************************************************/

#define _______________________________________________________________________
#define ____HEADER_FILES____


#define _______________________________________________________________________
#define ____MACRO_DEFINITION____


#define _______________________________________________________________________
#define ____TYPE_DEFINITION____


#define _______________________________________________________________________
#define ____EXTERNAL_VARIABLE_DEFINITION____


#define _______________________________________________________________________
#define ____EXTERNAL_FUNCTION_DEFINITION____
unsigned short GetCRC16(unsigned char *BufferPtr, unsigned long NumberOfByte);
unsigned short GetCRC16Fast(void *inP, unsigned long NumberOfByte);
unsigned long GetCrc32(unsigned char *p, unsigned long n);
unsigned long GetCRC32Fast(void *inP, unsigned long NumberOfByte);
unsigned short Get12Bits(unsigned char * base);
unsigned short Get16Bits(unsigned char *base);
unsigned long  Get24Bits(unsigned char *base);
unsigned long Get32Bits(unsigned char *base);
unsigned short SWAP16(unsigned short A);
unsigned int SWAP32(unsigned long A);

unsigned char *DecompressData(unsigned char *data);

//long atol(const char *dest);
//char tolower(char c);

#endif /* _UTIL_H_ */


