Library for Modtronix NZ32 STM32 boards, like the NZ32-SC151, NZ32-SB072, NZ32-SE411 and others

Revision:
4:43abdd8eda40
Child:
12:0303f1aef603
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mx_default_debug.h	Sun Aug 30 09:29:08 2015 +1000
@@ -0,0 +1,127 @@
+/**
+ * File:      mx_default_debug.h
+ *
+ * Author:    Modtronix Engineering - www.modtronix.com
+ *
+ * Description:
+ *
+ * Software License Agreement:
+ * This software has been written or modified by Modtronix Engineering. The code
+ * may be modified and can be used free of charge for commercial and non commercial
+ * applications. If this is modified software, any license conditions from original
+ * software also apply. Any redistribution must include reference to 'Modtronix
+ * Engineering' and web link(www.modtronix.com) in the file header.
+ *
+ * THIS SOFTWARE IS PROVIDED IN AN 'AS IS' CONDITION. NO WARRANTIES, WHETHER EXPRESS,
+ * IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE
+ * COMPANY SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR
+ * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
+ */
+#ifndef SRC_MX_DEFAULT_DEBUG_H_
+#define SRC_MX_DEFAULT_DEBUG_H_
+
+//This file is used for default debugging. Standard way to use it is:
+//
+//
+//===================================================================
+//========= Use in c or cpp file (NOT main.c or main.cpp) ===========
+//
+//----- Add following code to top of file debugging is required -----
+//#define DEBUG_ENABLE            1
+//#include "mx_default_debug.h"
+//
+//-------------- Use MX_DEBUG function to write debug ---------------
+//MX_DEBUG("\r\nTest Debug message");
+//
+//
+//
+//===================================================================
+//=================== Use in main.c or main.cpp =====================
+//
+//--------------- Add following code to top of main.c ---------------
+//#define DEBUG_ENABLE_MAIN       1
+//Serial streamDebug(USBTX, USBRX);               //Default is UART3
+//Stream* pMxDebug = &streamDebug;                //DON'T EDIT!! This pointer is used by external debug code to write to debug stream
+//#include "mx_default_debug.h"
+//
+//------------- Add following code to bottom of main.c --------------
+//void mxDebug(const char *format, ...) {
+//#define STRING_STACK_LIMIT 100
+//
+//    //Process argument list, and write out somewhere
+//    va_list arg;
+//    va_start(arg, format);
+//    int len = vsnprintf(NULL, 0, format, arg);
+//    if (len < STRING_STACK_LIMIT) {
+//        char temp[STRING_STACK_LIMIT];
+//        vsprintf(temp, format, arg);
+//        streamDebug.puts(temp);
+//    } else {
+//        char *temp = new char[len + 1];
+//        vsprintf(temp, format, arg);
+//        streamDebug.puts(temp);
+//        delete[] temp;
+//    }
+//    va_end(arg);
+//
+//    //Send to standard stream
+//    //va_list args;
+//    //va_start(args, format);
+//    //vfprintf(stderr, format, args);
+//    //va_end(args);
+//}
+
+
+#ifndef WEAK
+    #if defined (__ICCARM__)
+        #define WEAK     __weak
+    #else
+        #define WEAK     __attribute__((weak))
+    #endif
+#endif
+
+
+///////////////////////////////////////////////////////////////////////////////
+// Following is for main file - file that has mxDebug() defined in it
+#if defined(DEBUG_ENABLE_MAIN)
+
+#if (DEBUG_ENABLE_MAIN==1) && !defined(NDEBUG)
+    #define MX_DEBUG  pMxDebug->printf
+    //#define MX_DEBUG(format, args...) ((void)0) //DISABLE Debugging
+#else
+    //GCC's CPP has extensions; it allows for macros with a variable number of arguments. We use this extension here to preprocess pmesg away.
+    #define MX_DEBUG(format, args...) ((void)0)
+#endif
+
+
+///////////////////////////////////////////////////////////////////////////////
+// Following is for any file that uses debugging (except main file that has mxDebug() defined in it)
+#else   //#if defined(DEBUG_ENABLE_MAIN)
+
+//IMPORTANT, when enabling debugging, it is very important to note the following:
+//- If (MX_DEBUG_IS_POINTER==1), ensure there is global Stream pointer defined somewhere in code to override "pMxDebug = NULL" below!
+//- If (MX_DEBUG_IS_POINTER==0), define a mxDebug() function somewhere in code to handel debug output
+
+#if (DEBUG_ENABLE==1) && !defined(NDEBUG)
+//Alternative method in stead of using NULL below. This requires to create derived Stream class in each file we want to use debugging
+//    class modtronixDebugStream : public Stream {int _putc(int value) {return 0;}int _getc() {return 0;}};
+//    static modtronixDebugStream modtronixDebug;
+//    WEAK Stream* pMxDebug = &modtronixDebug;
+    #if (MX_DEBUG_IS_POINTER==1)        //More efficient, but only works if pMxDebug is defined in code. Disabled by default!
+        WEAK Stream* pMxDebug = NULL;
+        #define MX_DEBUG  pMxDebug->printf
+    #else
+        WEAK void mxDebug(const char *format, ...) {}
+        #define MX_DEBUG mxDebug
+    #endif
+#else
+    //GCC's CPP has extensions; it allows for macros with a variable number of arguments. We use this extension here to preprocess pmesg away.
+    #define MX_DEBUG(format, args...) ((void)0)
+#endif
+
+#endif  //#if defined(DEBUG_ENABLE_MAIN)
+
+
+
+#endif /* SRC_MX_DEFAULT_DEBUG_H_ */