/******************************************************************************
 * $Id: AKFS_Common.h 580 2012-03-29 09:56:21Z yamada.rj $
 ******************************************************************************
 *
 * Copyright (C) 2012 Asahi Kasei Microdevices Corporation, Japan
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
#ifndef AKFS_INC_COMMON_H
#define AKFS_INC_COMMON_H

#ifdef WIN32
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0501
#endif    					
  					
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <stdarg.h>
#include <crtdbg.h>
#include "Android.h"

#define DBG_LEVEL	DBG_LEVEL4
#define ENABLE_AKMDEBUG	1

#else
#include <stdio.h>     /* frpintf */
#include <stdlib.h>    /* atoi */
#include <string.h>    /* memset */
#include <unistd.h>
#include <stdarg.h>    /* va_list */
#include <utils/Log.h> /* LOGV */
#include <errno.h>     /* errno */

#endif

/*** Constant definition ******************************************************/
#define AKM_TRUE	1	/*!< Represents true */
#define AKM_FALSE	0	/*!< Represents false */
#define AKM_SUCCESS	1	/*!< Represents success */
#define AKM_FAIL	0	/*!< Represents fail */

#undef LOG_TAG
#define LOG_TAG "AKMD_FS"

#define DBG_LEVEL0	0	/* Critical */
#define DBG_LEVEL1	1	/* Notice */
#define DBG_LEVEL2	2	/* Information */
#define DBG_LEVEL3	3	/* Debug */
#define DBG_LEVEL4	4	/* Verbose */

#ifndef DBG_LEVEL
#define DBG_LEVEL	DBG_LEVEL0
#endif

#define DATA_AREA01	0x0001
#define DATA_AREA02	0x0002
#define DATA_AREA03	0x0004
#define DATA_AREA04	0x0008
#define DATA_AREA05	0x0010
#define DATA_AREA06	0x0020
#define DATA_AREA07	0x0040
#define DATA_AREA08	0x0080
#define DATA_AREA09	0x0100
#define DATA_AREA10	0x0200
#define DATA_AREA11	0x0400
#define DATA_AREA12	0x0800
#define DATA_AREA13	0x1000
#define DATA_AREA14	0x2000
#define DATA_AREA15	0x4000
#define DATA_AREA16	0x8000


/* Debug area definition */
#define AKMDATA_DUMP		DATA_AREA01	/*<! Dump data */
#define AKMDATA_BDATA		DATA_AREA02	/*<! BDATA */
#define AKMDATA_MAG			DATA_AREA03 /*<! Magnetic Field */
#define AKMDATA_ACC			DATA_AREA04 /*<! Accelerometer */
#define AKMDATA_ORI			DATA_AREA05 /*<! Orientation */
#define AKMDATA_GETINTERVAL	DATA_AREA06
#define AKMDATA_LOOP		DATA_AREA07
#define AKMDATA_DRV			DATA_AREA08

#ifndef ENABLE_AKMDEBUG
#define ENABLE_AKMDEBUG		0	/* Eanble debug output when it is 1. */
#endif

#define OPMODE_CONSOLE		0x01
#define OPMODE_FST			0x02

/***** Debug Level Output *************************************/
#if ENABLE_AKMDEBUG
#define AKMDEBUG(level, format, ...) \
    (((level) <= DBG_LEVEL) \
	  ? (fprintf(stdout, (format), ##__VA_ARGS__)) \
	  : ((void)0))
#else
#define AKMDEBUG(level, format, ...)
#endif

/***** Dbg Zone Output ***************************************/
#if ENABLE_AKMDEBUG
#define AKMDATA(flag, format, ...)  \
	((((int)(flag)) & g_dbgzone) \
	  ? (fprintf(stdout, (format), ##__VA_ARGS__)) \
	  : ((void)0))
#else
#define AKMDATA(flag, format, ...)
#endif

/***** Log output ********************************************/
#ifdef AKM_LOG_ENABLE
#define AKM_LOG(format, ...)	ALOGD((format), ##__VA_ARGS__)
#else
#define AKM_LOG(format, ...)
#endif

/***** Error output *******************************************/
#define AKMERROR \
	((g_opmode & OPMODE_CONSOLE) \
	  ? (fprintf(stderr, "%s:%d Error.\n", __FUNCTION__, __LINE__)) \
	  : (ALOGE("%s:%d Error.", __FUNCTION__, __LINE__))) 

#define AKMERROR_STR(api) \
	((g_opmode & OPMODE_CONSOLE) \
	  ? (fprintf(stderr, "%s:%d %s Error (%s).\n", \
	  		  __FUNCTION__, __LINE__, (api), strerror(errno))) \
	  : (ALOGE("%s:%d %s Error (%s).", \
	  		  __FUNCTION__, __LINE__, (api), strerror(errno))))

/*** Type declaration *********************************************************/

/*** Global variables *********************************************************/
extern int g_stopRequest;	/*!< 0:Not stop,  1:Stop */
extern int g_opmode;		/*!< 0:Daemon mode, 1:Console mode. */
extern int g_dbgzone;		/*!< Debug zone. */

/*** Prototype of function ****************************************************/

#endif /* AKMD_INC_AKCOMMON_H */

