| 
									
										
										
										
											2009-07-28 21:32:10 +00:00
										 |  |  | // Copyright (C) 2003 Dolphin Project.
 | 
					
						
							| 
									
										
										
										
											2009-03-07 08:35:01 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | // This program is free software: you can redistribute it and/or modify
 | 
					
						
							|  |  |  | // it under the terms of the GNU General Public License as published by
 | 
					
						
							|  |  |  | // the Free Software Foundation, version 2.0.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // This program is distributed in the hope that it will be useful,
 | 
					
						
							|  |  |  | // but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
					
						
							|  |  |  | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
					
						
							|  |  |  | // GNU General Public License 2.0 for more details.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // A copy of the GPL 2.0 should have been included with the program.
 | 
					
						
							|  |  |  | // If not, see http://www.gnu.org/licenses/
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Official SVN repository and contact information can be found at
 | 
					
						
							|  |  |  | // http://code.google.com/p/dolphin-emu/
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-28 08:57:34 +00:00
										 |  |  | #ifndef _LOG_H_
 | 
					
						
							|  |  |  | #define _LOG_H_
 | 
					
						
							| 
									
										
										
										
											2009-03-07 08:35:01 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-20 20:52:37 +00:00
										 |  |  | #define	NOTICE_LEVEL  1  // VERY important information that is NOT errors. Like startup and OSReports.
 | 
					
						
							|  |  |  | #define	ERROR_LEVEL   2  // Critical errors 
 | 
					
						
							|  |  |  | #define	WARNING_LEVEL 3  // Something is suspicious.
 | 
					
						
							| 
									
										
										
										
											2009-03-18 17:17:58 +00:00
										 |  |  | #define	INFO_LEVEL    4  // General information.
 | 
					
						
							|  |  |  | #define	DEBUG_LEVEL   5  // Detailed debugging - might make things slow.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-16 19:08:26 +00:00
										 |  |  | #ifdef __cplusplus
 | 
					
						
							| 
									
										
										
										
											2009-03-07 08:35:01 +00:00
										 |  |  | namespace LogTypes | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2010-07-16 19:08:26 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2009-03-07 08:35:01 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | enum LOG_TYPE { | 
					
						
							|  |  |  | 	ACTIONREPLAY, | 
					
						
							|  |  |  | 	AUDIO, | 
					
						
							|  |  |  | 	AUDIO_INTERFACE, | 
					
						
							|  |  |  | 	BOOT, | 
					
						
							|  |  |  | 	COMMANDPROCESSOR, | 
					
						
							|  |  |  | 	COMMON, | 
					
						
							|  |  |  | 	CONSOLE, | 
					
						
							|  |  |  | 	DISCIO, | 
					
						
							| 
									
										
										
										
											2009-09-03 20:00:09 +00:00
										 |  |  | 	FILEMON, | 
					
						
							| 
									
										
										
										
											2009-03-07 08:35:01 +00:00
										 |  |  | 	DSPHLE, | 
					
						
							| 
									
										
										
										
											2009-04-06 17:12:05 +00:00
										 |  |  | 	DSPLLE, | 
					
						
							| 
									
										
										
										
											2009-07-18 01:16:17 +00:00
										 |  |  | 	DSP_MAIL, | 
					
						
							| 
									
										
										
										
											2009-03-07 08:35:01 +00:00
										 |  |  | 	DSPINTERFACE, | 
					
						
							|  |  |  | 	DVDINTERFACE, | 
					
						
							|  |  |  | 	DYNA_REC, | 
					
						
							|  |  |  | 	EXPANSIONINTERFACE, | 
					
						
							| 
									
										
										
										
											2009-05-01 15:17:03 +00:00
										 |  |  | 	POWERPC, | 
					
						
							| 
									
										
										
										
											2009-03-07 08:35:01 +00:00
										 |  |  | 	GPFIFO, | 
					
						
							|  |  |  | 	HLE, | 
					
						
							|  |  |  | 	MASTER_LOG, | 
					
						
							|  |  |  | 	MEMMAP, | 
					
						
							| 
									
										
										
										
											2009-07-18 01:16:17 +00:00
										 |  |  | 	MEMCARD_MANAGER, | 
					
						
							| 
									
										
										
										
											2009-03-07 08:35:01 +00:00
										 |  |  | 	OSREPORT, | 
					
						
							| 
									
										
										
										
											2009-03-18 17:17:58 +00:00
										 |  |  | 	PAD,  | 
					
						
							| 
									
										
										
										
											2009-10-06 15:49:20 +00:00
										 |  |  | 	PROCESSORINTERFACE, | 
					
						
							| 
									
										
										
										
											2009-03-07 08:35:01 +00:00
										 |  |  | 	PIXELENGINE, | 
					
						
							|  |  |  | 	SERIALINTERFACE, | 
					
						
							| 
									
										
										
										
											2009-05-04 19:28:53 +00:00
										 |  |  | 	SP1, | 
					
						
							| 
									
										
										
										
											2009-03-07 08:35:01 +00:00
										 |  |  | 	STREAMINGINTERFACE, | 
					
						
							|  |  |  | 	VIDEO, | 
					
						
							|  |  |  | 	VIDEOINTERFACE, | 
					
						
							|  |  |  | 	WII_IOB, | 
					
						
							|  |  |  | 	WII_IPC, | 
					
						
							|  |  |  | 	WII_IPC_DVD, | 
					
						
							|  |  |  | 	WII_IPC_ES, | 
					
						
							|  |  |  | 	WII_IPC_FILEIO, | 
					
						
							|  |  |  | 	WII_IPC_HLE, | 
					
						
							|  |  |  | 	WII_IPC_NET, | 
					
						
							|  |  |  | 	WII_IPC_SD, | 
					
						
							| 
									
										
										
										
											2009-04-19 17:03:48 +00:00
										 |  |  | 	WII_IPC_STM, | 
					
						
							| 
									
										
										
										
											2009-03-07 08:35:01 +00:00
										 |  |  | 	WII_IPC_WIIMOTE, | 
					
						
							| 
									
										
										
										
											2009-03-18 17:17:58 +00:00
										 |  |  | 	WIIMOTE, | 
					
						
							| 
									
										
										
										
											2009-08-15 14:34:52 +00:00
										 |  |  | 	NETPLAY, | 
					
						
							| 
									
										
										
										
											2009-03-18 17:17:58 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-07 08:35:01 +00:00
										 |  |  | 	NUMBER_OF_LOGS // Must be last
 | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-18 17:17:58 +00:00
										 |  |  | // FIXME: should this be removed?
 | 
					
						
							| 
									
										
										
										
											2009-03-07 08:35:01 +00:00
										 |  |  | enum LOG_LEVELS { | 
					
						
							| 
									
										
										
										
											2009-03-20 20:52:37 +00:00
										 |  |  | 	LNOTICE = NOTICE_LEVEL, | 
					
						
							| 
									
										
										
										
											2009-03-18 17:17:58 +00:00
										 |  |  | 	LERROR = ERROR_LEVEL, | 
					
						
							|  |  |  | 	LWARNING = WARNING_LEVEL, | 
					
						
							|  |  |  | 	LINFO = INFO_LEVEL, | 
					
						
							| 
									
										
										
										
											2009-09-01 13:17:23 +00:00
										 |  |  | 	LDEBUG = DEBUG_LEVEL, | 
					
						
							| 
									
										
										
										
											2009-03-07 08:35:01 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-16 19:08:26 +00:00
										 |  |  | #ifdef __cplusplus
 | 
					
						
							| 
									
										
										
										
											2009-03-07 08:35:01 +00:00
										 |  |  | }  // namespace
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-16 19:08:26 +00:00
										 |  |  | void GenericLog(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE type, | 
					
						
							|  |  |  | 		const char *file, int line, const char *fmt, ...); | 
					
						
							|  |  |  | extern "C" { | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | void GenericLogC(int level, int type, | 
					
						
							|  |  |  | 		const char *file, int line, const char *fmt, ...); | 
					
						
							|  |  |  | #define GenericLog GenericLogC
 | 
					
						
							|  |  |  | #ifdef __cplusplus
 | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2009-03-07 08:35:01 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-18 17:17:58 +00:00
										 |  |  | #if defined LOGGING || defined _DEBUG || defined DEBUGFAST
 | 
					
						
							| 
									
										
										
										
											2009-09-01 08:44:32 +00:00
										 |  |  | #define MAX_LOGLEVEL DEBUG_LEVEL
 | 
					
						
							| 
									
										
										
										
											2009-03-07 08:35:01 +00:00
										 |  |  | #else
 | 
					
						
							| 
									
										
										
										
											2009-09-01 08:44:32 +00:00
										 |  |  | #ifndef MAX_LOGLEVEL
 | 
					
						
							|  |  |  | #define MAX_LOGLEVEL WARNING_LEVEL
 | 
					
						
							|  |  |  | #endif // loglevel
 | 
					
						
							| 
									
										
										
										
											2009-03-07 08:35:01 +00:00
										 |  |  | #endif // logging
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-03 11:15:17 +00:00
										 |  |  | #ifdef GEKKO
 | 
					
						
							|  |  |  | #define GENERIC_LOG(t, v, ...)
 | 
					
						
							|  |  |  | #else
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-07 08:35:01 +00:00
										 |  |  | // Let the compiler optimize this out
 | 
					
						
							| 
									
										
										
										
											2010-01-03 08:48:48 +00:00
										 |  |  | #define GENERIC_LOG(t, v, ...) {if (v <= MAX_LOGLEVEL) {GenericLog(v, t, __FILE__, __LINE__, __VA_ARGS__);}}
 | 
					
						
							| 
									
										
										
										
											2009-05-03 11:15:17 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2009-03-07 08:35:01 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-05-26 21:07:13 +00:00
										 |  |  | #define ERROR_LOG(t,...) { GENERIC_LOG(LogTypes::t, LogTypes::LERROR, __VA_ARGS__) }
 | 
					
						
							|  |  |  | #define WARN_LOG(t,...) { GENERIC_LOG(LogTypes::t, LogTypes::LWARNING, __VA_ARGS__) }
 | 
					
						
							|  |  |  | #define NOTICE_LOG(t,...) { GENERIC_LOG(LogTypes::t, LogTypes::LNOTICE, __VA_ARGS__) }
 | 
					
						
							|  |  |  | #define INFO_LOG(t,...) { GENERIC_LOG(LogTypes::t, LogTypes::LINFO, __VA_ARGS__) }
 | 
					
						
							|  |  |  | #define DEBUG_LOG(t,...) { GENERIC_LOG(LogTypes::t, LogTypes::LDEBUG, __VA_ARGS__) }
 | 
					
						
							| 
									
										
										
										
											2009-03-07 08:35:01 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-20 20:52:37 +00:00
										 |  |  | #if MAX_LOGLEVEL >= DEBUG_LEVEL
 | 
					
						
							| 
									
										
										
										
											2009-03-07 08:35:01 +00:00
										 |  |  | #define _dbg_assert_(_t_, _a_) \
 | 
					
						
							|  |  |  | 	if (!(_a_)) {\ | 
					
						
							|  |  |  | 		ERROR_LOG(_t_, "Error...\n\n  Line: %d\n  File: %s\n  Time: %s\n\nIgnore and continue?", \ | 
					
						
							|  |  |  | 					   __LINE__, __FILE__, __TIME__); \ | 
					
						
							|  |  |  | 		if (!PanicYesNo("*** Assertion (see log)***\n")) {Crash();} \ | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | #define _dbg_assert_msg_(_t_, _a_, ...)\
 | 
					
						
							|  |  |  | 	if (!(_a_)) {\ | 
					
						
							|  |  |  | 		ERROR_LOG(_t_, __VA_ARGS__); \ | 
					
						
							|  |  |  | 		if (!PanicYesNo(__VA_ARGS__)) {Crash();} \ | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | #define _dbg_update_() Host_UpdateLogDisplay();
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #else // not debug
 | 
					
						
							|  |  |  | #define _dbg_update_() ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef _dbg_assert_
 | 
					
						
							| 
									
										
										
										
											2010-07-31 19:06:44 +00:00
										 |  |  | #define _dbg_assert_(_t_, _a_) {}
 | 
					
						
							|  |  |  | #define _dbg_assert_msg_(_t_, _a_, _desc_, ...) {}
 | 
					
						
							| 
									
										
										
										
											2009-03-07 08:35:01 +00:00
										 |  |  | #endif // dbg_assert
 | 
					
						
							| 
									
										
										
										
											2009-03-20 20:52:37 +00:00
										 |  |  | #endif // MAX_LOGLEVEL DEBUG
 | 
					
						
							| 
									
										
										
										
											2009-03-07 08:35:01 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #define _assert_(_a_) _dbg_assert_(MASTER_LOG, _a_)
 | 
					
						
							| 
									
										
										
										
											2009-05-03 11:15:17 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #ifndef GEKKO
 | 
					
						
							| 
									
										
										
										
											2009-03-07 08:35:01 +00:00
										 |  |  | #ifdef _WIN32
 | 
					
						
							|  |  |  | #define _assert_msg_(_t_, _a_, _fmt_, ...)		\
 | 
					
						
							|  |  |  | 	if (!(_a_)) {\ | 
					
						
							|  |  |  | 		if (!PanicYesNo(_fmt_, __VA_ARGS__)) {Crash();} \ | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | #else // not win32
 | 
					
						
							|  |  |  | #define _assert_msg_(_t_, _a_, _fmt_, ...)		\
 | 
					
						
							|  |  |  | 	if (!(_a_)) {\ | 
					
						
							|  |  |  | 		if (!PanicYesNo(_fmt_, ##__VA_ARGS__)) {Crash();} \ | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | #endif // WIN32
 | 
					
						
							| 
									
										
										
										
											2009-05-03 11:15:17 +00:00
										 |  |  | #else // GEKKO
 | 
					
						
							|  |  |  | #define _assert_msg_(_t_, _a_, _fmt_, ...)
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2009-03-07 08:35:01 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-28 08:57:34 +00:00
										 |  |  | #endif // _LOG_H_
 |