Azure IoT common library

Dependents:   STM32F746_iothub_client_sample_mqtt f767zi_mqtt iothub_client_sample_amqp iothub_client_sample_http ... more

Revision:
45:1119d0f2c4d8
Parent:
42:0cc3c211ad26
--- a/azure_c_shared_utility/macro_utils.h	Fri May 04 13:26:26 2018 -0700
+++ b/azure_c_shared_utility/macro_utils.h	Mon Jun 11 15:41:10 2018 -0700
@@ -94,7 +94,7 @@
 #define IFCOMMA_124 ,
 
 #define IFCOMMA_NOFIRST(N) C2(IFCOMMA_NOFIRST, N)
-#define IFCOMMA_NOFIRST1 
+#define IFCOMMA_NOFIRST1
 #define IFCOMMA_NOFIRST2 ,
 #define IFCOMMA_NOFIRST3 ,
 #define IFCOMMA_NOFIRST4 ,
@@ -7396,7 +7396,7 @@
 #ifdef _MSC_VER
 #define FOR_EACH_2(MACRO_TO_INVOKE, ...) C2(FOR_EACH_2_, C1(COUNT_ARG(__VA_ARGS__))) LPAREN MACRO_TO_INVOKE, __VA_ARGS__)
 /*the COUNTED breed of FOR_EACH macro invokes a macro with 3 parameters: 1st being the count of invocation. For example.
-FOR_EACH_2_COUNTER(MACRO, a,b,c,d,e,f) will result in 
+FOR_EACH_2_COUNTER(MACRO, a,b,c,d,e,f) will result in
 MACRO(6, a,b)
 MACRO(4, c,d)
 MACRO(2, e,f)
@@ -12575,8 +12575,8 @@
     extern int C2(enumName, _FromString)(const char* enumAsString, enumName* destination);
 
 
-#define DEFINE_ENUMERATION_CONSTANT_AS_WIDESTRING(x) C2(L, TOSTRING(x)) , 
-#define DEFINE_ENUMERATION_CONSTANT_AS_STRING(x) TOSTRING(x) , 
+#define DEFINE_ENUMERATION_CONSTANT_AS_WIDESTRING(x) C2(L, TOSTRING(x)) ,
+#define DEFINE_ENUMERATION_CONSTANT_AS_STRING(x) TOSTRING(x) ,
 /*DEFINE_ENUM_STRINGS goes to .c*/
 #define DEFINE_ENUM_STRINGS(enumName, ...) const char* C2(enumName, StringStorage)[COUNT_ARG(__VA_ARGS__)] = {FOR_EACH_1(DEFINE_ENUMERATION_CONSTANT_AS_STRING, __VA_ARGS__)}; \
 const char* C2(enumName,Strings)(enumName value)                   \
@@ -12614,6 +12614,39 @@
     }                                                                           \
 }                                                                               \
 
+#define ENUM_TO_STRING(enumName, enumValue) C2(enumName, Strings)(enumValue)
+#define STRING_TO_ENUM(stringValue, enumName, addressOfEnumVariable) C2(enumName, _FromString)(stringValue, addressOfEnumVariable)
+
+#define DEFINE_MICROMOCK_ENUM_TO_STRING(type, ...) MICROMOCK_ENUM_TO_STRING(type, FOR_EACH_1(DEFINE_ENUMERATION_CONSTANT_AS_WIDESTRING, __VA_ARGS__));
+
+#define EMPTY()
+#define MACRO_UTILS_DELAY(id) id EMPTY LPAREN )
+
+#endif /*MACRO_UTILS_H*/
+
+// This portion of macro_utils.h is designed to be included multiple times to
+// redefine DEFINE_LOCAL_ENUM in situations where ENUM_TO_STRING is never called
+// thus avoiding the following warning
+//
+// warning: function "XXXXXXStrings" was declared but never referenced
+//
+// For Example, iothubtransport_amqp_common.c defines AMQP_TRANSPORT_STATE
+// but never calls ENUM_TO_STRING. To silence this warning you would do the
+// following:
+//
+// // Suppress unused function warning for AMQP_TRANSPORT_STATEstrings
+// #define ENUM_TO_STRING_UNUSED
+// #include "azure_c_shared_utility/macro_utils.h"
+//
+// DEFINE_LOCAL_ENUM(AMQP_TRANSPORT_STATE, AMQP_TRANSPORT_STATE_STRINGS);
+//
+
+#ifdef DEFINE_LOCAL_ENUM
+#undef DEFINE_LOCAL_ENUM
+#endif
+
+#ifndef ENUM_TO_STRING_UNUSED
+
 #define DEFINE_LOCAL_ENUM(enumName, ...) typedef enum C2(enumName, _TAG) { FOR_EACH_1(DEFINE_ENUMERATION_CONSTANT, __VA_ARGS__)} enumName; \
 static const char* C2(enumName, StringStorage)[COUNT_ARG(__VA_ARGS__)] = {FOR_EACH_1(DEFINE_ENUMERATION_CONSTANT_AS_STRING, __VA_ARGS__)}; \
 static const char* C2(enumName,Strings)(enumName value)            \
@@ -12629,13 +12662,8 @@
     }                                                              \
 }
 
-
-#define ENUM_TO_STRING(enumName, enumValue) C2(enumName, Strings)(enumValue)
-#define STRING_TO_ENUM(stringValue, enumName, addressOfEnumVariable) C2(enumName, _FromString)(stringValue, addressOfEnumVariable)
-
-#define DEFINE_MICROMOCK_ENUM_TO_STRING(type, ...) MICROMOCK_ENUM_TO_STRING(type, FOR_EACH_1(DEFINE_ENUMERATION_CONSTANT_AS_WIDESTRING, __VA_ARGS__));
-
-#define EMPTY()
-#define MACRO_UTILS_DELAY(id) id EMPTY LPAREN )
-
-#endif /*MACRO_UTILS_H*/
+#else
+
+#define DEFINE_LOCAL_ENUM(enumName, ...) typedef enum C2(enumName, _TAG) { FOR_EACH_1(DEFINE_ENUMERATION_CONSTANT, __VA_ARGS__)} enumName;
+
+#endif